【发布时间】:2013-08-03 17:04:15
【问题描述】:
我需要在单个过程中使用两个插入语句来更新主表和详细表,因此我尝试使用 delimiter 关键字来实现此目的。我正在使用 phpMyAdmin 3.5.8、客户端 libmysql - 5.0.96 和 mysql 5.1.70。我尝试了各种语法,但似乎都没有。这是我的查询:
DELIMITER //
CREATE PROCEDURE `agregarPrincipio` (IN ID_PRODUCTO INT UNSIGNED, IN DESCR VARCHAR(100))
BEGIN
START TRANSACTION;
INSERT INTO `TM_PRINCIPIO_ACTIVO` (`DESCRIPCION`) VALUES(DESCR);
INSERT INTO TD_PRINCIPIO_ACTIVO(`ID_TD_PRINCIPIO_ACTIVO`,`ID_TM_PRINCIPIO_ACTIVO`) VALUES(ID_PRODUCTO,LAST_INSERT_ID());
COMMIT;
END
//
DELIMITER ;
对可能发生的事情有什么想法吗?
【问题讨论】:
-
MYSQL 5.1 已经很老了。您是否考虑升级到 MySQL 5.5 或 MariaDB 5.5?
-
对不起,我不明白。这只是语法的问题?错误信息是什么?您使用哪个客户端来访问您的 RDBMS?请记住
DELIMITER不是 SQL 语句,而只是 MySQL CLI 语句——因此只有在使用该程序时才可用。 -
我得到的错误... #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的“END”附近使用正确的语法
-
问题出在
INSERT INTO TD_PRINCIPIO_ACTIVO(ID_TD_PRINCIPIO_ACTIVO,ID_TM_PRINCIPIO_ACTIVO) VALUES(ID_PRODUCTO,LAST_INSERT_ID());这一行。您试图在第二个 select 语句中直接调用存储过程LAST_INSERT_ID()。如果LAST_INSERT_ID()返回单个值,请尝试将其保存在变量中。然后使用该变量
标签: mysql stored-procedures phpmyadmin delimiter