【问题标题】:Delimiter not working on MySQL 5.1分隔符不适用于 MySQL 5.1
【发布时间】: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


【解决方案1】:

问题出在一行

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() 返回单个值,请尝试将其保存在变量中。然后使用那个变量

DECLARE last_id int default 0;
SET last_id= SELECT LAST_INSERT_ID(); #if it is a function other wise use exec
INSERT INTO TD_PRINCIPIO_ACTIVO(`ID_TD_PRINCIPIO_ACTIVO`,`ID_TM_PRINCIPIO_ACTIVO`) VALUES(ID_PRODUCTO,last_id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2011-08-04
    • 2020-08-25
    相关资源
    最近更新 更多