neo*_*tam 11 mysql stored-procedures
在 mysql 控制台中,我们将使用 delimiter 命令来更改分隔符,这对定义过程很有用。我 delimiter只了解 mysql 客户端的命令(客户端命令)。
但我使用不具有该命令的MySQL客户端delimiter
一样dbslayer,对这种客户我该怎么定义程序。
现在考虑:
create procedure test_pro()
begin
select 'hello pro';
end
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
mysql -u root -pmypass test < proc_file
Run Code Online (Sandbox Code Playgroud)
其中 proc_file 包含上述过程;
但这给了我以下错误:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
Run Code Online (Sandbox Code Playgroud)
事件我尝试了以下
create procedure test_pro()
begin
select 'hello pro';
end;
Run Code Online (Sandbox Code Playgroud)
(添加了尾随分号)但我得到了同样的错误。
我遇到了同样的问题dbslayer,如果我能够通过终端定义上述过程,我想我应该能够通过dbslayer
Rol*_*DBA 12
没有其他办法了。您必须使用该DELIMITER命令。为什么 ?
如果您曾经执行过存储过程的 mysqldump,每个存储过程都以
DELIMITER ;;
Run Code Online (Sandbox Code Playgroud)
并以
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
这是我之前提到的一篇文章:DROP PROCEDURE IF EXISTS not included in mysqldump
尝试使用 mysqldump 转储一个存储过程并亲自查看
我还写了一些代码来做到这一点:
至于@altmannmarcelo发布的答案,它直接回答了您的问题(他的回答为 +1)。否则,mysqldumps 永远无法恢复存储过程。
您可以做两件事来容纳新的 DELIMITER:
在命令行本身上给出定界符
mysql -u root -pmypass --delimiter="//" test < myproc.sql
Run Code Online (Sandbox Code Playgroud)
它是mysql客户端程序的命令行选项
[root@****]# mysql --help | grep -i delimiter
--delimiter=name Delimiter to be used.
delimiter ;
Run Code Online (Sandbox Code Playgroud)
您可以将代码写入文本文件并按照@altmannmarcelo 的建议对文本文件执行
echo "DELIMITER //" > myproc.sql
echo "create procedure test_pro()" >> myproc.sql
echo "begin" >> myproc.sql
echo "select 'hello pro';" >> myproc.sql
echo "end" >> myproc.sql
echo "//" >> myproc.sql
mysql -u root -pmypass test < myproc.sql
Run Code Online (Sandbox Code Playgroud)
您需要更改分隔符以创建过程,否则 MySQL 将尝试提交您的查询 select 'hello pro';
将您的程序更改为:
DELIMITER //
create procedure test_pro()
begin
select 'hello pro';
end
//
Run Code Online (Sandbox Code Playgroud)
来自MySQL 文档:
如果使用mysql客户端程序定义一个包含分号字符的存储程序,就会出现问题。默认情况下,mysql 本身将分号识别为语句分隔符,因此您必须临时重新定义分隔符,以使 mysql 将整个存储的程序定义传递给服务器。