Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Procedury składowe - typy parametrów, Po co?
spokoloko123
post
Post #1





Grupa: Zarejestrowani
Postów: 114
Pomógł: 12
Dołączył: 15.02.2012

Ostrzeżenie: (0%)
-----


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?


--------------------
Pomogłem? Kliknij POMÓGŁ
Go to the top of the page
+Quote Post
IceManSpy
post
Post #2





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.

Ten post edytował IceManSpy 7.08.2012, 11:23:05


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Raczej chodzi tu zwyczajnie o optymalizację.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
spokoloko123
post
Post #4





Grupa: Zarejestrowani
Postów: 114
Pomógł: 12
Dołączył: 15.02.2012

Ostrzeżenie: (0%)
-----


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'


--------------------
Pomogłem? Kliknij POMÓGŁ
Go to the top of the page
+Quote Post
alegorn
post
Post #5





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
maly_swd
post
Post #6





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


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" ?


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
alegorn
post
Post #7





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


@maly_swd:: działa podobnie, ale zauważ ze tutaj masz definicję pola CHAR(1)

są warringi.

j.
Go to the top of the page
+Quote Post
maly_swd
post
Post #8





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


ja widze: REATE PROCEDURE `proc01` (IN user_id int(1))
int;)


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
darko
post
Post #9





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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ń.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
xdev
post
Post #10





Grupa: Zarejestrowani
Postów: 39
Pomógł: 3
Dołączył: 17.09.2011

Ostrzeżenie: (0%)
-----


To, że działają szybciej to mit. Sama kompilacja w mySQL to czas pomijalnie mały, do tego są nieelastyczne.

Lepiej budować w locie.
Go to the top of the page
+Quote Post
prachwal
post
Post #11





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 10:27