2016-04-11 6 views
0

Ich versuche, Code für meine gespeicherte Prozedur unten auszuführen, und es löst Fehler bei Zeile 14. Ich bin nicht in der Lage zu lokalisieren, was Fehler ist, mir helfen, zu lösen.MySQL Stored Procedures Syntax Fehler

DELIMITER $$ 
    CREATE PROCEDURE usp_SetGems (
    -- Add the parameters for the stored procedure here 
    p_requestid int/* =null */, 
    p_akcija int/* =null */) 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 

    -- Insert statements for procedure here 
    if p_akcija = 0 then 

    declare @v_userId char(36); 
    declare @v_vingems int; 

    select @v_userId:=r.user_id, @v_vingems := r.value from Requests r 
    where r.Id=p_requestid; 

    update Users 
    set [email protected]_vingems 
    where id=v_userId; 

    else 

    declare @v_userrId longtext; 
    declare @v_vingemss int; 

    select @v_userrId.user_id:=r.user_id, @v_vingemss := r.value from Requests r 
    where r.Id=p_requestid; 

    update Users 
    set [email protected]_vingems 
    where id=v_userrId; 
    end if; 
end; $$  
DELIMITER ; 
+0

Wie ist die Struktur der 'Requests' Tabelle? – apokryfos

+0

@apokryfos http://prntscr.com/aqxr4o – Dunster

+0

Wert ist dezimal und user_id ist int, sie scheinen nicht mit den Datentypen Ihrer Variablen übereinzustimmen. – apokryfos

Antwort

0

Ihre Declare-Anweisung falsch sind (@v_userId char (36) erklären, erklären @v_vingems int; .....). Unten ist der korrekte Code Ihres Verfahrens: -

DELIMITER $$ 
    CREATE PROCEDURE usp_SetGems (
    -- Add the parameters for the stored procedure here 
    p_requestid int/* =null */, 
    p_akcija int/* =null */) 
    BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 

    -- Insert statements for procedure here 
    if p_akcija = 0 then 
     BEGIN 
      select r.user_id, r.value INTO @v_userId, @v_vingems from Requests r 
      where r.Id=p_requestid; 
      update Users 
      set [email protected]_vingems 
      where id=v_userId; 
     END; 
    else 
     BEGIN 
      select r.user_id, r.value INTO @v_userId, @v_vingems from Requests r 
      where r.Id=p_requestid; 

      update Users 
      set [email protected]_vingems 
      where id=v_userrId; 
     END; 
    end if; 
end $$ 
DELIMITER ; 
0

Sie haben ein reserviertes Wort in Ihrer Auswahl. "In"

select r.user_id,r.value **into** v_userrId, v_vingems from Requests r 
where r.Id=p_requestid; 
+0

Was ist los mit 'SELECT ... IN ' '? – apokryfos

+0

gibt es immer noch ein Problem, ich fand, dass es wie @v_userId sein sollte: = r.user_id, aber es funktioniert nicht, * sad_face_panda * – Dunster

+0

@apokryfos, Hast du das Problem und den Zeilenfehler gelesen? Es ist klar, dass das Wort "in" in dieser Auswahl nicht korrekt ist. – dquinonez

Verwandte Themen