Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: własna funkcja gdzie jest błąd?
Forum PHP.pl > Forum > Bazy danych > MySQL
axxxon
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 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
askone
Według mnie brakuje Ci polecenia declare dla każdej zmiennej wykorzystywanej w funkcji...
axxxon
to nie rozwiazuje problemu niestety... nadal ten sam blad, wykrywany w tym samym miejscu...
pmir13
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;
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-2024 Invision Power Services, Inc.