2011-05-18 59 views
0
DROP PROCEDURE IF EXISTS CreateTopic; 
CREATE PROCEDURE CreateTopic 
(
    i_forum_id INT, 
    i_user_id INT, 
    i_title VARCHAR(255), 
    i_language VARCHAR(50), 
    i_content TEXT, 
    i_stickied TINYINT, 
    i_announce TINYINT, 
    i_closed TINYINT 
) 
BEGIN 
    INSERT INTO forum_topics (forum_id, user_id, title, language) 
     VALUES (i_forum_id, i_user_id, i_title, i_language); 
    SET @tid := LAST_INSERT_ID(); 
    INSERT INTO forum_posts (topic_id, user_id, subject, content) VALUES (@tid, i_user_id, i_title, i_content); 
    INSERT INTO core_logs (obj_id, user_id, type, action) VALUES (@tid, i_user_id, 'Topics', 'Topic Created'); 
END; 

我不確定它有什麼問題。 MySQL告訴我所有的東西都是不正確的,它只是不想被創建。而且,參數與它們各自的表格具有相同的類型和長度。MySQL:這個CREATE PROCEDURE語句有什麼問題?

+0

給我們一些詳細信息,請所有的錯誤 – gbn 2011-05-18 18:47:12

+0

下面是截圖:http://gyazo.com/be0034c6d9638a61f9f13fe30d07e87e.png – 2011-05-18 18:50:27

回答

5

這是你的第一個「;」這打破了程序定義,mysql認爲你已經完成並對待任何事情「;」作爲另一個查詢。 您必須使用存儲過程的分隔符。

DELIMITER $$ 
DROP PROCEDURE IF EXISTS CreateTopic$$ 
CREATE PROCEDURE CreateTopic 
(
    i_forum_id INT, 
    i_user_id INT, 
    i_title VARCHAR(255), 
    i_language VARCHAR(50), 
    i_content TEXT, 
    i_stickied TINYINT, 
    i_announce TINYINT, 
    i_closed TINYINT 
) 
BEGIN 
    INSERT INTO forum_topics (forum_id, user_id, title, language) 
     VALUES (i_forum_id, i_user_id, i_title, i_language); 
    SET @tid := LAST_INSERT_ID(); 
    INSERT INTO forum_posts (topic_id, user_id, subject, content) VALUES (@tid, i_user_id, i_title, i_content); 
    INSERT INTO core_logs (obj_id, user_id, type, action) VALUES (@tid, i_user_id, 'Topics', 'Topic Created'); 
END 
$$ 
DELIMITER ; 
1

有幾個問題。我希望我得到他們全部:

DROP PROCEDURE IF EXISTS CreateTopic; 
CREATE PROCEDURE CreateTopic 
(
    i_forum_id INT, 
    i_user_id INT, 
    i_title VARCHAR(255), 
    i_language VARCHAR(50), 
    i_content TEXT, 
    i_stickied TINYINT, 
    i_announce TINYINT, 
    i_closed TINYINT 
) 
BEGIN 
    DECLARE tid INT; 
    INSERT INTO forum_topics (`forum_id`, `user_id`, `title`, `language`) 
     VALUES (i_forum_id, i_user_id, i_title, i_language); 
    SET tid = LAST_INSERT_ID(); 
    INSERT INTO forum_posts (`topic_id`, `user_id`, `subject`, `content`) VALUES (tid, i_user_id, i_title, i_content); 
    INSERT INTO core_logs (`obj_id`, `user_id`, `type`, `action`) VALUES (tid, i_user_id, 'Topics', 'Topic Created'); 
END; 
+0

':='是短論壇聲明和設置。無論如何,你的修復也給了我一個錯誤:http://gyazo.com/d618df714a31b58003e58f5494a6afaf.png – 2011-05-18 19:10:44

+0

什麼信息? – ic3b3rg 2011-05-18 19:13:25

+0

您需要在'CREATE'之前使用';'以外的東西來改變分隔符,並在'END'之後回到';'。看到這裏的例子:http://dev.mysql.com/doc/refman/5.1/en/create-procedure.html – 2011-05-18 19:14:54