2013-08-28 14 views
13

Mam przechowywaną procedurę MySQL, w której znajduję maksymalną wartość z tabeli.Jak sprawdzić, czy zmienna ma wartość NULL, a następnie ustawić ją za pomocą procedury składowanej MySQL?

Jeśli nie ma wartości, chcę ustawić zmienną na wczorajszą datę.

Problem polega na tym, że @last_run_time ma zawsze wartość NULL.

Poniższy kod nie jest wykonywany z jakiegoś powodu

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

Jak mogę ustawić zmienną @last_run_time prawidłowo?

+1

I jak opisano zastosowanie 'COALESCE' zastąpienia null. WĘGIEL (@last_run_time, Date_Sub (TERAZ(), INTERWAŁ 1 DZIEŃ)); http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce – actkatiemacias

+0

Dziękuję. Najwyraźniej problem polega na tym, że nie używam poprawnie zmiennych. – Jaylen

Odpowiedz

24

@last_run_time to 9.4. User-Defined Variables i last_run_time datetime jeden 13.6.4.1. Local Variable DECLARE Syntax, są różne zmienne.

Spróbuj: SELECT last_run_time;

UPDATE

przykład:

/* 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 ; 
+0

- jak mogę utworzyć pierwsze 3 zmienne globalne? jak muszę je później wywołać w moim kodzie? – Jaylen

+0

zdefiniuj je przed wywołaniem przechowywanego procesu, więc mają zasięg poza proc. – Bohemian

+0

Muszę zdefiniować je w procedurze, ponieważ potrzebuję tylko użyć w ciągu BEGIN .... END. Ale trzeba wiedzieć, jaki jest prawidłowy sposób ich używania. – Jaylen

Powiązane problemy