Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Procedury składowe - typy parametrów
Forum PHP.pl > Forum > Bazy danych
spokoloko123
Witam,

Zastanawiam się po co definiuje się typ parametrów dla funkcji i procedur składowych. Mógłby ktoś to po krótce wyjaśnić?
  1. CREATE PROCEDURE proc(IN z CHAR(1))

Chodzi mi o to CHAR(1). Np. Mam taką małą procedurę:
  1. DELIMITER //
  2. CREATE PROCEDURE `proc01` (IN user_id int(1))
  3. BEGIN
  4. SELECT * FROM users WHERE id = user_id;
  5. END;
  6. // DELIMITER ;

Mogę jeśli wywołam je z parametrem 1 to zwróci mi usera z id 1 ale jak wywołam np z parametrem 'foobar' to zwraca pusty wynik ale nie pokazuje błędu, więc po co ta deklaracja typu?
IceManSpy
Nigdy nie zagłębiałem się w procedury i jak działają, ale wnioskując po innych językach programowania (tzn takimi z typem zmiennych), to robi się to po to, że jak oczekujesz np bool, to żeby nikt nie wywołał procedury z intem, który wynosi np. 2.

Z resztą sam sobie chyba wytłumaczyłeś przykładem z 1 i 'foobar' - jedynka przeszła, a foobar już nie.
erix
Raczej chodzi tu zwyczajnie o optymalizację.
spokoloko123
Cytat(IceManSpy @ 7.08.2012, 12:22:01 ) *
Nigdy nie zagłębiałem się w procedury i jak działają, ale wnioskując po innych językach programowania (tzn takimi z typem zmiennych), to robi się to po to, że jak oczekujesz np bool, to żeby nikt nie wywołał procedury z intem, który wynosi np. 2.

Z resztą sam sobie chyba wytłumaczyłeś przykładem z 1 i 'foobar' - jedynka przeszła, a foobar już nie.


No właśnie foobar przeszedł, a nie zwrócił rekordów w zasobie, bo naturalnie nie ma usera o id 'foobar'
alegorn
Cytat
No właśnie foobar przeszedł, a nie zwrócił rekordów w zasobie, bo naturalnie nie ma usera o id 'foobar'

uscislajac - to nie znalazl usera o id 'f'

j.
maly_swd
A nie zadzialalo to tak jak w phpie?

WHERE id=(int)foobar
czyli wyszlo WHERE ID=0

ps w mysqlu nie ma czegos takiego jak "warningi" ?
alegorn
@maly_swd:: działa podobnie, ale zauważ ze tutaj masz definicję pola CHAR(1)

są warringi.

j.
maly_swd
ja widze: REATE PROCEDURE `proc01` (IN user_id int(1))
int;)
darko
Procedury składowe poprzez m.in. jawne określanie typów zmiennych i cache'owanie - skracają czas wykonywania zapytań. Jest to jedna z wielu form optymalizacji w porównaniu do zwykłych zapytań.
xdev
To, że działają szybciej to mit. Sama kompilacja w mySQL to czas pomijalnie mały, do tego są nieelastyczne.

Lepiej budować w locie.
prachwal
Cytat(xdev @ 1.09.2012, 20:42:09 ) *
To, że działają szybciej to mit. Sama kompilacja w mySQL to czas pomijalnie mały, do tego są nieelastyczne.

Lepiej budować w locie.


nie każdą konstrukcję zbudujesz w locie
http://dev.mysql.com/doc/refman/5.0/en/cursors.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.