2016-09-26 1 views
-2

i Prozedur in mysql machen wollen .. aber ich sehe 42000 Fehler ..wie Verfahren zu machen, in mysql zu aktualisieren

ich möchte zählen (id) und Aktualisierungsdaten.

// meine Quelle

create or replace procedure Update_Sleepuser 
(in_time TIMESTAMP) 

IS 
n_id INT; 
count INT; 

BEGIN 

    select u_id INTO n_id 
    from userDetail --DBTABLE 
    where lastLoginDate - interval 90 day >= in_time 

     --DBTABLE : userDetail , TABLE column : lastLoginDate 

    IF(n_id IS NULL) THEN count := 0; 
    ELSE (select count(*) INTO count 
    from userDetail 
    where lastLoginDate - interval 90 day >= in_time 
    END IF; 

    UPDATE userState 
    SET sleep=1, isAbnormal=1 
    WHERE u_id = n_id; 

    COMMIT; 
END$$ 
+0

erstellen oder Verfahren Update_Sleepuser (in_time TIMESTAMP) IS n_id INT ersetzen; Zählung INT; BEGIN wählen u_id INTO n_id von userDetail --DBTABLE wo lastLoginDate - Intervall 90 Tage> = in_time --DBTABLE: userDetail, Tabellenspalte: lastLoginDate IF (n_id IS NULL) THEN zählen: = 0; ELSE (select count (*) INTO Zählung von userDetail wo lastLoginDate - Intervall 90 Tage> = in_time END IF; UPDATE userstate SET Schlaf = 1, isAbnormal = 1 WHERE u_id = n_id; COMMIT; END $$ –

+0

Bitte schreiben Sie keinen umfangreichen Code in Kommentare, bearbeiten Sie den Beitrag. –

Antwort

0

Viele Syntaxfehler - 1) Count ist ein reserviertes Wort es wie cnt 2 zu etwas ändern) ist? 3) lokale Variablen müssen unmittelbar nach der begin-Anweisung auftreten und müssen eine Declare-Anweisung vorausgehen. 4) Jede SQL-Anweisung muss durch; 5) - ist SQL Server-Syntax für einen Kommentar mysql entspricht #. Ich sehe den Wert der Einstellungszählung nicht, da sie nicht verwendet wird. Hier ist eine Version, die bei syntaktisch korrekt ist: -

delimiter // 
CREATE DEFINER=`root`@`localhost` PROCEDURE `Update_Sleepuser`(IN `in_time` TIMESTAMP) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
DECLARE  n_id INT; 
DECLARE cnt INT; 
    SET n_id = null; 
    select u_id INTO n_id 
    from userDetail #DBTABLE 
    where DATE_SUB(lastLoginDate, interval 90 day) >= in_time ; 
     #DBTABLE : userDetail , TABLE column : lastLoginDate 
    IF n_id is null THEN 
      SET cnt := 0; 
    ELSE 
      select count(*) INTO cnt 
       from userDetail 
       where DATE_SUB(lastLoginDate, interval 90 day) >= in_time; 
    END IF; 
    UPDATE userState 
    SET sleep=1, isAbnormal=1 
    WHERE u_id = n_id; 
    COMMIT; 
END // 
delimiter ; 
Verwandte Themen