2014-01-08 151 views
0

這是我的存儲過程:SQL存儲過程中,變量爲空

CREATE PROCEDURE `insert_exercise` (nazev VARCHAR(45), URL VARCHAR(255), obtiznost INT, partie INT) 

BEGIN 
    DECLARE video_id INT; 
    DECLARE cvik_id INT; 

    INSERT INTO `odkaz_video` (URL) VALUES (@URL); 
    SELECT id INTO video_id FROM `odkaz_video` WHERE URL = @URL; 
    INSERT INTO `cvik` (nazev, odkaz_video, obtiznost_id) VALUES (@nazev, video_id, @obtiznost); 
    SELECT id INTO cvik_id FROM `cvik` WHERE nazev = @nazev; 
    INSERT INTO `cvik_partie` (partie_id, cvik_id) VALUES (@partie, cvik_id); 
END 

當我把這叫做SP,我得到錯誤1048列「網址」不能爲空。即使我輸入了所有參數,爲什麼這個變量(@URL)爲空?

感謝您的迴應

+0

您也可能會發現這個答案有幫助:http://stackoverflow.com/questions/1009954/mysql-variable-vs-variable-whats-the-difference – zedfoxus

+0

能否請您包括您用來調用存儲過程的確切語句以及所涉及表的完整表定義?這可能是問題出現在調用語句或表定義中的關鍵約束的結果中。 – Gerf

回答

1

用作過程參數給出的名字:

CREATE PROCEDURE insert_exercisenazev VARCHAR(45),URL VARCHAR(255),obtiznost INT ,partie INT)

它們的前綴不是@

看看這個教程:MySQL stored procedure parameters

0

@URL爲NULL,因爲你永遠不將其值設置。輸入參數名爲URL,而不是@URL

此外,我建議您在參數名稱前加上p_和局部變量名稱v_以區分它們與列名稱。

例如:

CREATE PROCEDURE `insert_exercise` (p_nazev VARCHAR(45), p_URL VARCHAR(255), p_obtiznost INT, p_partie INT) 

BEGIN 
    DECLARE v_video_id INT; 
    DECLARE v_cvik_id INT; 

    INSERT INTO `odkaz_video` (URL) VALUES (p_URL); 
    SELECT id INTO v_video_id FROM `odkaz_video` WHERE URL = p_URL; 
    INSERT INTO `cvik` (nazev, odkaz_video, obtiznost_id) VALUES (p_nazev, v_video_id, p_obtiznost); 
    SELECT id INTO v_cvik_id FROM `cvik` WHERE nazev = p_nazev; 
    INSERT INTO `cvik_partie` (partie_id, cvik_id) VALUES (p_partie, v_cvik_id); 
END