web-dev-qa-db-fra.com

Comment vérifier si une variable est NULL, puis la définir avec une procédure stockée MySQL?

J'ai une procédure stockée MySQL où je trouve la valeur maximale d'une table.

S'il n'y a pas de valeur, je veux définir la variable à la date d'hier.

DECLARE current_procedure_name CHAR(60) DEFAULT 'accounts_general';
DECLARE last_run_time datetime DEFAULT NULL;
DECLARE current_run_time datetime DEFAULT NOW();

-- Define the last run time
SET last_run_time := (SELECT MAX(runtime) 
FROM dynamo.runtimes WHERE procedure_name = @current_procedure_name);

-- if there is no last run time found then use yesterday as starting point
IF(@last_run_time IS NULL) THEN
    SET last_run_time := DATE_SUB( NOW(), INTERVAL 1 DAY);
END IF;

SELECT @last_run_time;

Le problème est que @last_run_time est toujours NULL.

Le code suivant n'est pas exécuté pour une raison quelconque

IF(last_run_time IS NULL) THEN
    SET last_run_time := DATE_SUB( NOW(), INTERVAL 1 DAY);
END IF;

Comment puis-je définir la variable @last_run_time correctement?

16
Jaylen

@last_run_time est un 9.4. Variables définies par l'utilisateur et last_run_time datetime one 13.6.4.1. Variable locale DECLARE Syntax , sont des variables différentes.

Essayez: SELECT last_run_time;

[~ # ~] mise à jour [~ # ~]

Exemple:

/* CODE FOR DEMONSTRATION PURPOSES */
DELIMITER $$

CREATE PROCEDURE `sp_test`()
BEGIN
    DECLARE current_procedure_name CHAR(60) DEFAULT 'accounts_general';
    DECLARE last_run_time DATETIME DEFAULT NULL;
    DECLARE current_run_time DATETIME DEFAULT NOW();

    -- Define the last run time
    SET last_run_time := (SELECT MAX(runtime) FROM dynamo.runtimes WHERE procedure_name = current_procedure_name);

    -- if there is no last run time found then use yesterday as starting point
    IF(last_run_time IS NULL) THEN
        SET last_run_time := DATE_SUB(NOW(), INTERVAL 1 DAY);
    END IF;

    SELECT last_run_time;

    -- Insert variables in table2
    INSERT INTO table2 (col0, col1, col2) VALUES (current_procedure_name, last_run_time, current_run_time);
END$$

DELIMITER ;
26
wchiquito