问题描述
|
当我使用sqlYog进行存储过程时,它会提供以下模板:
DELIMITER $$
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
PROCEDURE `apachelogs`.`test`()
/*LANGUAGE sql
| [NOT] DETERMINISTIC
| { CONTAINS sql | NO sql | READS sql DATA | MODIFIES sql DATA }
| sql Security { DEFINER | INVOKER }
| COMMENT \'string\'*/
BEGIN
END$$
DELIMITER ;
我不知道为什么在创建存储过程之前更改定界符。以及为什么我仍然可以在create
语句中使用;
分隔符(我想可能是因为范围)。
解决方法
这将语句定界符更改为“ 3”,以防止MySQL尝试将存储过程中的任何分号解释为定界符。没有ѭ4,您将无法定义包含ѭ1的存储过程来分隔其中的语句。您可以将其视为在过程定义期间全局转义分号的一种方法。
从精美的手册中:
要重新定义mysql分隔符,请使用
delimiter
命令。以下示例显示了如何针对刚刚显示的“ 7”过程执行此操作。定界符更改为“ 8”,以使整个定义可以作为单个语句传递到服务器,然后在调用该过程之前恢复为“ 1”。这使得过程主体中使用的“ 1”定界符可以传递到服务器,而不是由mysql本身解释。
我不知道我的解释是否比手册更清晰,但也许其中之一(或两者结合)会带来一些理解。