Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> własna funkcja gdzie jest błąd?
axxxon
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 28.10.2010

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


Witam!
Zwracam się z prosbą o wskazanie mi błędu w mojej funkcji,(z błędu jaki dostaje wynika ze dzieje sie przy słowie RETURN) bo sam niestety jej nie widzę(za dużo siedzenia nad tym (IMG:style_emoticons/default/smile.gif) )
  1. DELIMITER $$
  2. CREATE FUNCTION znajdz(d varchar(255) )returns int
  3. begin
  4. SET @c=(SELECT SUBSTRING(d FROM 8));
  5. SET @poziom=0;
  6. SET @wynik=0;
  7. SET @podciag='wst';
  8. SET @r=(SELECT STRCMP(SUBSTRING(@c,1,4),@podciag));
  9. IF @r=0 then begin
  10. SET @poziom=1;
  11. SET @c=(SELECT SUBSTRING(@c FROM 5));
  12. end;
  13. IF @poziom=0 THEN SET @wynik=(SELECT `id` FROM `pola` WHERE `zakres`=@c);
  14. IF @poziom=1 THEN SET @wynik=(SELECT `id` FROM `pola` WHERE concat_ws('-',`podzial`,`zakres`)=@c);
  15. RETURN @wynik;
  16. end$$
  17. delimiter;


Błąd jaki dostaje to:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 15
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
askone
post
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Według mnie brakuje Ci polecenia declare dla każdej zmiennej wykorzystywanej w funkcji...
Go to the top of the page
+Quote Post
axxxon
post
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 28.10.2010

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


to nie rozwiazuje problemu niestety... nadal ten sam blad, wykrywany w tym samym miejscu...
Go to the top of the page
+Quote Post
pmir13
post
Post #4





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


To nie jest jeden błąd, to jest po prostu ostatni błąd, bo zgłaszane są od końca.
Właściwie cała funkcja jest do przepisania od nowa. Składniowo teraz powinno być dobrze, ale czy robi to co chcesz to inna sprawa.

  1. DROP FUNCTION IF EXISTS znajdz;
  2. DELIMITER $$
  3. CREATE FUNCTION znajdz(d varchar(255) )returns int
  4. READS SQL DATA
  5. BEGIN
  6. DECLARE poziom,wynik int;
  7. DECLARE c,podciag VARCHAR (255);
  8.  
  9. SET c=SUBSTRING(d FROM 8);
  10. SET poziom=0;
  11. SET wynik=0;
  12. SET podciag='wst';
  13. IF !STRCMP(SUBSTRING(c,1,4),podciag) THEN
  14. SET poziom=1;
  15. SET c=SUBSTRING(c FROM 5);
  16. END IF;
  17. IF poziom=0 THEN
  18. SELECT `id` INTO wynik FROM `pola` WHERE `zakres`=c;
  19. END IF;
  20. IF poziom=1 THEN
  21. SELECT `id` INTO wynik FROM `pola` WHERE concat_ws('-',`podzial`,`zakres`) = c;
  22. END IF;
  23. RETURN wynik;
  24. END$$
  25. DELIMITER;


Ten post edytował pmir13 13.04.2011, 17:19:29
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 06:14