0

I am making a procedure that inserts a place ("Sted") and I would like to check if the inputs are NULL. However, whenever I try to add an if-statement at the start to surround my code (marked CRASH below), it gives me an error saying my syntax is not right at "DECLARE varStedskodeID INT;" which is the part after the IF-statement I'm trying to add.

To my eyes the syntax of my if-statement is the same inside the code, but only my soon-to-be-NULL-check if-statement crashes even with just a simple IF(TRUE) THEN.

Can anyone give me a hint of what causes this one if to crash?

DROP PROCEDURE IF EXISTS InsertSted;
DELIMITER $$
CREATE PROCEDURE InsertSted(
    IN inputStedsnavn VARCHAR(255),
    IN inputStedstype VARCHAR(255),
    IN inputKommunenavn VARCHAR(255))
BEGIN
    IF(TRUE) THEN <<------ CRASH

        DECLARE varStedskodeID INT;
        DECLARE varKommunenr INT;

        IF(SELECT COUNT(StedkodeID) FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1) = 0 THEN
            INSERT INTO stedstype VALUES(DEFAULT, inputStedstype);
        END IF;
        SET varStedskodeID = (SELECT StedkodeID FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1);

        IF(SELECT COUNT(Kommunenr) FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1) = 1 THEN
            SET varKommunenr = (SELECT Kommunenr FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1);
            INSERT INTO sted VALUES(DEFAULT, inputStedsnavn, varStedskodeID, varKommunenr);
        END IF;

    END IF; <<------ CRASH
END$$
DELIMITER ;
PWL
  • 456
  • 4
  • 27

1 Answers1

0

DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements.

http://dev.mysql.com/doc/refman/5.0/en/declare.html

MySQL follows strict rules for DECLARE. You have to DECLARE variables, tables, etc... at the beginning of Stored Procedure.

Change Stored Procedure like this

DECLARE varStedskodeID INT;
 DECLARE varKommunenr INT;
IF(TRUE) THEN 

        IF(SELECT COUNT(StedkodeID) FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1) = 0 THEN
            INSERT INTO stedstype VALUES(DEFAULT, inputStedstype);
        END IF;
        SET varStedskodeID = (SELECT StedkodeID FROM stedstype WHERE Kodenavn = inputStedstype LIMIT 1);

        IF(SELECT COUNT(Kommunenr) FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1) = 1 THEN
            SET varKommunenr = (SELECT Kommunenr FROM kommune WHERE Kommunenavn = inputKommunenavn LIMIT 1);
            INSERT INTO sted VALUES(DEFAULT, inputStedsnavn, varStedskodeID, varKommunenr);
        END IF;

END IF; 
Vicky Thakor
  • 3,847
  • 7
  • 42
  • 67