在创建存储过程时常用到“delimiter”,
我经常碰到这样一个问题,
写完存储过程脚本执行时,老提示
“SQL ERROR(1064):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 'delimiter' at line 1”;开始我还老以为是编写的存储过程有问题,
后来我把
DROP PROCEDURE IF EXISTS sp_name;

delimiter //
CREATE PROCEDURE sp_name();
..
delimiter ;分开执行,就成功了;这是为什么了呢?还有时这样也不行,这又是为什么呢?

解决方案 »

  1.   

    你是在什么中执行的?MYSQL命令行?如果是直接贴出你的原语句。这样别人可以直接测试。
      

  2.   

    我在HeidiSQL下执行的,语句肯定没问题呢,
    开始我还以为是管理软件的问题,后来换 Navicat for MySQL 试了下后,情况一样。
      

  3.   

    我刚刚遇到了同一问题, 请查看: delimiter 与后缀 // 或 $$ 之间是否留有空格, 应该可以顺利解决问题。
      

  4.   

    有空格,我未证实的推测
    可能是
    DROP PROCEDURE IF EXISTS sp_name;

    delimiter //中间空了一行。
      

  5.   

    你是试过的吗?在任何管理器中都不行吗?我的在MySQl-Font中也不行。
      

  6.   

    告诉你,你只用delimiter // 不用delimiter ;试试看。
      

  7.   

    我遇到了一个问题,sql脚本执行报错说语法问题或没有那个表,但是在开发人员的workbench下却能都执行成功,但是用navicat或linux下的mysql执行脚本都出现报错,但是表都能建立起来,却不能用,不知道为什么?