2016-05-28 11 views
1

Ich habe gerade angefangen, über Transaktionen und gespeicherte Prozeduren zu lernen, und ich versuche, mich mit verschiedenen Möglichkeiten zur Zuweisung von Werten aus der Ergebnismenge zu Variablen vertraut zu machen.Transaktions- oder Variablendeklarationsfehler

Was den Fehler verursachen könnte auf DECLARE var_CurcId INT DEFAULT 0;

Hier ist, was ich bisher gemacht habe.

CREATE DEFINER=`root`@`localhost` PROCEDURE `addCurriculumWithSchoolYear`(IN p_subjectName varchar(50), IN p_yrLevel varchar(30), IN p_desc TEXT, IN p_creator varchar(20)) 
BEGIN 

    DECLARE hasError BOOL DEFAULT 0; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET hasError = 1; 

    DECLARE var_CurcId INT DEFAULT 0; 
    DECLARE var_syStart INT DEFAULT 0; 
    DECLARE var_syEnd INT DEFAULT 0; 

     START TRANSACTION; 

     -- 1 insert statement to curriculum table 
      INSERT INTO curriculum(`name`,`yearLevel`,`description`,`creator`) 
      VALUES(p_subjectName,p_yrLevel,p_desc,p_creator); 
     -- 2 insert statement to schoolyearcurriculum table 

      INSERT INTO schoolyearcurriculums(curriculumId,syStart,syEnd) 
      VALUES(var_CurcId,var_syStart,var_syEnd); 

     IF `hasError` THEN 
      ROLLBACK; -- if error occurs to any of the insert, select statements above, undo it 
     ELSE 
      COMMIT; -- if all insert, select statement is successful, execute. 
      SELECT 'Successfully Inserted Information'; 
     END IF; 
END; 

Die erorr auf die Erklärung der var_CurcId Variable sagt Syntax error: unexpected 'var_CurcId' (identifier)

Ich bin neu zu dieser so hoffe ich Sie mir helfen können. Ich versuche immer noch verschiedene Möglichkeiten wie die Verwendung des := Operators und select into und set.

Ich würde jede Hilfe zu schätzen wissen.

Danke.

Antwort

1

Dies ist ein bisschen schwierig. Legen Sie einfach alle Erklärungen vor dem Handler:

CREATE PROCEDURE `addCurriculumWithSchoolYear`(IN p_subjectName varchar(50), IN p_yrLevel varchar(30), IN p_desc TEXT, IN p_creator varchar(20)) 
BEGIN 
    DECLARE hasError BOOL DEFAULT 0; 
    DECLARE var_CurcId INT DEFAULT 0; 
    DECLARE var_syStart INT DEFAULT 0; 
    DECLARE var_syEnd INT DEFAULT 0; 

    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET hasError = 1; 

END 

Here eine SQL Fiddle ist.

In einem BEGIN/END Block müssen alle DECLARE s die ersten Anweisungen sein. Normalerweise ist der Handler nach den Variablendeklarationen; Ich wusste jedoch nicht, dass dies erforderlich war, bis es getestet wurde.

+0

Danke. Du hast es gelöst! Ich wusste nicht, dass Handler nach Variablendeklaration gehen muss. Ich dachte, dass alle DECLARE-Anweisung überall platziert werden kann. Ich schätze die Hilfe. Ein weiteres Lernen hat zu meinem Wissen beigetragen. – p3ace