mysql 修改定界符_mysql-在过程中的准备好的语句中使用定界符

编辑:请注意:如底部所述,我要的东西是不可能的!因此,问题得到了解答.

亲爱的人,堆满了,

我在存储过程中的准备好的语句中存在语法错误的问题.运行过程时出现语法错误,但是如果手动执行“ SELECT @sql;”返回的语法,则不会发生语法错误.命令.它与定界符有关,因为如果我只有一个命令,则它在过程中运行良好.我没有在程序中使用任何表来简化复制:

DROP PROCEDURE IF EXISTS stackoverflow_test;

DELIMITER $$

CREATE PROCEDURE stackoverflow_test ()

BEGIN

SET @sql = CONCAT('

SELECT "test12" AS test1;

SELECT "test34" AS test2;

');

#return the statement from @sql

SELECT @sql;

#execute the statement from @sql

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

END$$

DELIMITER ;

CALL stackoverflow_test ();

我试图寻找该结果,但是所有命中都是关于定义过程时DELIMITER命令的一般用法.现在,我知道定界符在客户端起作用.我是否必须在服务器上保存的语句中使用其他内容?编辑:我确实尝试使用$$作为分隔符,这产生了相同的语法错误.

最好

乔内斯

编辑:这似乎是不可能的. “准备好的语句的SQL语法不支持多语句”来源:http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html.对我来说,解决方案是将准备好的语句简化为一个语句,并在执行过程中移动其他语句,这对我有用,因为其他语句是静态的:

#first static statement

DROP TABLE IF EXISTS `table`;

#dynamic statement

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

#second static statement

ALTER TABLE `table`

ADD UNIQUE INDEX sdef ( `cntry`, `track`, `year` );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值