Argumentem procedury

0

Witam,
Ja już trochę zgłupiałem, bo zapytanie działa poprawnie ale gdy chce to wpakować w procedure to wyskakuje błąd na argumencie,
Poratuje ktoś ?

 DELIMITER $$;
CREATE PROCEDURE liczSuma (in newID INT)
BEGIN 
	SELECT encja.IDRezerwacja,SUM(encja.Suma)
		FROM (

		SELECT pokojpozycja.IDRezerwacja,SUM(pokoj.CenaPokoj) as Suma
					FROM `pokojpozycja` 
					LEFT JOIN pokoj on pokoj.IDPokoj = pokojpozycja.IDPokoj
					GROUP BY  pokojpozycja.IDRezerwacja
					WHERE  pokojpozycja.IDRezerwacja = newID ;
		UNION

		SELECT uslugapozycja.IDRezerwacja , SUM(usluga.CenaUsluga) as Suma
					FROM `uslugapozycja` 
					LEFT JOIN usluga on usluga.IDUsluga = uslugapozycja.IDUsluga
					GROUP BY (uslugapozycja.IDRezerwacja)
					WHERE uslugapozycja.IDRezerwacja = newID 
				  )AS encja
				  GROUP by (encja.IDRezerwacja)
END
DELIMITER $$;
0

zapytanie pewnie działa , ale składnia procedury ma trochę inne reguły niż zwykły "select"

0

Więc gdzie mam błąd ? opierałem się na materiałach w internecie i taką składnię widzę
Przykładowo z tej strony http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

0

tu masz przykład procedury działającej na Firebirdzie

CREATE PROCEDURE POBIERZ_AKTUALIZACJE(  SKLEP SMALLINT)
RETURNS
  (
  P_ID BIGINT,
  P_ADRES CHAR(80) CHARACTER SET WIN1250 COLLATE WIN1250,
  P_PLIK CHAR(90) CHARACTER SET WIN1250 COLLATE WIN1250,
  P_PLIK_OLD CHAR(80) CHARACTER SET WIN1250 COLLATE WIN1250,
  P_KLIENT CHAR(50) CHARACTER SET WIN1250 COLLATE WIN1250
  )
AS
DECLARE VARIABLE POBRANY_ADRES CHAR(80);
DECLARE VARIABLE POBRANY_PLIK CHAR(90);
DECLARE VARIABLE POBRANY_PLIK_OLD CHAR(90);
DECLARE VARIABLE POBRANY_ID BIGINT;
DECLARE VARIABLE POBRANY_KLIENT CHAR(60);
BEGIN
  for select aktualizacje.id,adres,plik,plik_old,klient  from aktualizacje,sklepy where aktualizacje.SKLEP=:sklep and aktywne=1 and zrobione=0 and AKTUALIZACJE.SKLEP=sklepy.sklep into  :pobrany_id, :pobrany_adres, :pobrany_plik, :pobrany_plik_old,:pobrany_klient 
  do begin
         p_klient=:pobrany_klient;
         p_adres= :pobrany_adres;
         p_id = :pobrany_id;
         p_plik=:pobrany_plik;
         p_plik_old=:pobrany_plik_old;
         suspend;
  end
  
end 
0

dalej mi coś nie działa, spróbowałem tak :

DELIMITER $$
CREATE PROCEDURE liczSuma (in newID INT)
BEGIN 
set @dml =(
	SELECT encja.IDRezerwacja,SUM(encja.Suma)
		FROM (

		SELECT pokojpozycja.IDRezerwacja,SUM(pokoj.CenaPokoj) as Suma
					FROM `pokojpozycja` 
					LEFT JOIN pokoj on pokoj.IDPokoj = pokojpozycja.IDPokoj
					GROUP BY  pokojpozycja.IDRezerwacja
					WHERE  pokojpozycja.IDRezerwacja = newID ;
		UNION

		SELECT uslugapozycja.IDRezerwacja , SUM(usluga.CenaUsluga) as Suma
					FROM `uslugapozycja` 
					LEFT JOIN usluga on usluga.IDUsluga = uslugapozycja.IDUsluga
					GROUP BY (uslugapozycja.IDRezerwacja)
					WHERE uslugapozycja.IDRezerwacja = newID 
				  )AS encja
				  GROUP by (encja.IDRezerwacja)
				  )
				  prepare stmt from @dml;
    execute stmt;
END$$
DELIMITER ;

		 
0

Wywal średnik sprzed UNION

1 użytkowników online, w tym zalogowanych: 0, gości: 1