2016-02-16 63 views
0

我想寫一個插入到一個表(A),然後查詢另一個表(B),然後最後插入表(C)最後插入ID,存儲過程與表B的結果進行比較。我編寫了一個名爲VetIdFromCode的存儲過程,用於從表B中進行選擇,該表可以單獨工作。當我孤立地運行查詢時,爲IN參數賦值,然後它運行正常,但是當我嘗試將其另存爲存儲過程時,它會告訴我'SET @LIID ...'附近有無效的SQL' 非常感謝幫幫我。MySQL存儲過程工作原理SQL

CREATE PROCEDURE `NewClientUser`(
IN `uemail` VARCHAR(60), 
IN `uphash` CHAR(40), 
IN `uvcode` VARCHAR(11)) 
DETERMINISTIC 
MODIFIES SQL DATA 
SQL SECURITY INVOKER 
INSERT INTO users (user_id,user_email,user_hash,user_role) 
    VALUES (NULL,uemail,uphash,'1'); 
SET @LIID = LAST_INSERT_ID(); 
CALL `VetIdFromCode`(uvcode, @VID); 
INSERT INTO user_vet_lookup(user_id,vet_id) 
    VALUES (@LIID,@VID); 

回答

1

您需要用關鍵詞「BEGIN」啓動過程的「代碼」,並在結尾處輸入「END」。像:

CREATE PROCEDURE `NewClientUser`(
IN `uemail` VARCHAR(60), 
IN `uphash` CHAR(40), 
IN `uvcode` VARCHAR(11)) 
BEGIN 
    DETERMINISTIC 
    MODIFIES SQL DATA 
    SQL SECURITY INVOKER 
    INSERT INTO users (user_id,user_email,user_hash,user_role) 
     VALUES (NULL,uemail,uphash,'1'); 
    SET @LIID = LAST_INSERT_ID(); 
    CALL `VetIdFromCode`(uvcode, @VID); 
    INSERT INTO user_vet_lookup(user_id,vet_id) 
     VALUES (@LIID,@VID); 
END 

退房的文檔:http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

+0

哦,你打我給它也由xD'DELIMITER // CREATE PROCEDURE ..... END // DELIMITER;' – Enissay

+0

感謝。我是通過phpMyAdmin來做的,並假設它會爲我添加開始和結束,並且我必須在其他地方出現錯誤。哎呀。 –