MySQL: что не так с этим оператором CREATE PROCEDURE? - PullRequest
0 голосов
/ 18 мая 2011
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 говорит мне, что все виды неверны, он просто не хочет создаваться. Кроме того, параметры соответствуют типам и длинам соответствующих таблиц.

Ответы [ 2 ]

5 голосов
/ 19 мая 2011

Это ваш первый ";"это нарушает определение процедуры, и 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 голос
/ 18 мая 2011

Есть несколько проблем. Я надеюсь, что получил их всех:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...