zoukankan      html  css  js  c++  java
  • SQL控制台执行创建存储过程的脚本失败

      1、存储过程创建脚本示例

    use test_db;
    DROP PROCEDURE IF EXISTS test_procedure_create;
    CREATE PROCEDURE test_procedure_create()
    BEGIN
        select 'test';
    END

      2、脚本执行时遇到的问题现象

      错误详情如下:

    SQL 错误 [1064] [42000]: 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
      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
      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

      3、原因分析

      从错误信息中,看不出是什么原因,就知道是语法错误。此时,一时半会也看不出语法错在哪里。后来想了想,在存储体中每条SQL语句都是以分号结尾的,而在SQL控制台中在执行脚本时,一遇到分号就会执行SQL语句,这样的话若是该条语句并不是正确的执行语句的话,那么就会报错。由此,联想到是不是DELIMITER分隔符没有设置好,由于DELIMITER默认情况下是以分号作为分隔符的,而在存储体中又是以分号为标识来确定每条语句的,所以存在冲突了;那么我们可以更改默认的分隔符,例如将分隔符设置为$$(当然,你也可以设置为其它的合法符号),以它来作为起始和结束的标识。修改好后的脚本内容如下:

    use test_db;
    DROP PROCEDURE IF EXISTS test_procedure_create;
    DELIMITER $$ -- 注意DELIMITER与$$之间存在空格
    $$
    CREATE PROCEDURE test_procedure_create()
    BEGIN
        select 'test';
    END
    $$
    DELIMITER ; -- 一定要记得还原哦,注意DELIMITER与;之间存在空格

      4、效果检验

      在SQL控制台中执行修改后的脚本,结果运行正常,如下图所示:

         

      上图表明存储过程已创建成功!

  • 相关阅读:
    AIX配置时间服务器(NTP)
    weblogic的集群与配置
    Linux平台块设备到字符设备(裸设备)的三种映射方式(转载)
    什么是条带化(striping) ?(转载)
    ORACLE directory 目录--转载
    Linux安装MySQL的两种方法
    Goldengate trial队列维护
    Oracle GoldenGate 11.2 OGG-01168(转)
    编程之美---最大公约数
    敏感词过滤的算法原理之DFA算法
  • 原文地址:https://www.cnblogs.com/bien94/p/12900295.html
Copyright © 2011-2022 走看看