zoukankan      html  css  js  c++  java
  • 在linux下的mysql导入存储过程出现语法错误,需要在文件里加DELIMITER //

     http://my.oschina.net/zerotime/blog/113126

    Mysql命令行创建存储过程时,首先要输入分隔符

    DELIMITER // 
    CREATE PROCEDURE proc () 
    begin 
    …… 
    end 
    // 
    OK,可以创建完成了。

    显示存储过程命令

    show create procedure 存储过程名;

    删除存储过程命令

    drop procedure 存储过程名;

    http://database.51cto.com/art/201011/235017.htm

    MYSQL命令行的使用是学习MYSQL数据库过程中的基础知识,那么应该如何用MYSQL命令行创建存储过程呢?

    也尝试了一些方法,但是第一个分号mysql就以为语句结束了,就举个例子来说:

    1. CREATE PROCEDURE p7 (IN b INTEGER(12))  
    2.  
    3. begin  
    4.  
    5. declare a INTEGER(12);  
    6.  
    7. set a=5;  
    8.  
    9. INSERT INTO t VALUES (a);  
    10.  
    11. SELECT s1*a FROM t WHERE b<=s1;  
    12.  
    13. End  
    14.  

    这个存储过程,在命令行直接创建的话,在第三排你输入分号后就报错了……因为MYSQL以为这个语句结束了,那对于MYSQL而言

    1. CREATE PROCEDURE p7 (IN b INTEGER(12))  
    2.  
    3. begin  
    4.  
    5. declare a INTEGER(12);  
    6.  

    肯定是个错误语句。

    然后看了些东西,原来要加分隔符- -……….

    1. DELIMITER //  
    2.  
    3. CREATE PROCEDURE p7 (IN b INTEGER(12))  
    4.  
    5. begin  
    6.  
    7. declare a INTEGER(12);  
    8.  
    9. set a=5;  
    10.  
    11. INSERT INTO t VALUES (a);  
    12.  
    13. SELECT s1*a FROM t WHERE b<=s1;  
    14.  
    15. End  
    16.  
    17. //  
    18.  

    就OK了…………意思就是说在//……//之间的当成一个语句执行所以MYSQL接到的才是这个存储过程完整的创建语句。

    http://zhuixue.iteye.com/blog/375353

    查询数据库中的存储过程

    方法一:

           select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'

    方法二:

             show procedure status;

    查看存储过程或函数的创建代码

    show create procedure proc_name;
    show create function func_name;

    http://www.111cn.net/database/mysql/35817.htm

    方法一:(直接查询)

    select `specific_name` from mysql.proc where db = 'your_db_name' and `type` = 'procedure'

    方法二:(查看数据库里所有存储过程+内容)

    show procedure status;

    方法三:(查看当前数据库里存储过程列表)

    select specific_name from mysql.proc ;

    方法四:(查看某一个存储过程的具体内容)

    select body from mysql.proc where specific_name = 'your_proc_name';

    查看存储过程或函数的创建代码 :

    show create procedure your_proc_name;
    show create function your_func_name;

    删除存储过程:

    drop procedure your_proc_name;

    =============

    http://543197.blog.51cto.com/533197/114141

    文章引用:

    [url]http://bbs.tarena.com.cn/viewthread.phptid=166328[/url]

    MySQL 存储过程是从 MySQL 5.0 开始增加的新功能。存储过程的优点有一箩筐。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。 一、MySQL 创建存储过程 
    “pr_add” 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 “a”、“b”,返回这两个参数的和。 
    drop procedure if exists pr_add;
    -- 计算两个数之和
    create procedure pr_add
    (
       a int,
       b int
    )
    begin
       declare c int;
       if a is null then
          set a = 0;
       end if;
       if b is null then
          set b = 0;
       end if;
       set c = a + b;
       select c as sum;
       /*
       return c; -- 不能在 MySQL 存储过程中使用。return 只能出现在函数中。
       */
    end;
    二、调用 MySQL 存储过程 
    call pr_add(10, 20);
    执行 MySQL 存储过程,存储过程参数为 MySQL 用户变量。 
    set @a = 10;
    set @b = 20;
    call pr_add(@a, @b);
    三、MySQL 存储过程特点 
    创建 MySQL 存储过程的简单语法为: 
    create procedure 存储过程名字()
    (
       [in|out|inout] 参数 datatype
    )
    begin
       MySQL 语句;
    end;
    MySQL 存储过程参数如果不显式指定“in”、“out”、“inout”,则默认为“in”。习惯上,对于是“in” 的参数,我们都不会显式指定。 
    1. MySQL 存储过程名字后面的“()”是必须的,即使没有一个参数,也需要“()” 
    2. MySQL 存储过程参数,不能在参数名称前加“@”,如:“@a int”。下面的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不需要在变量名字前加“@”,虽然 MySQL 客户端用户变量要加个“@”。 
    create procedure pr_add
    (
       @a int,  -- 错误
       b int    -- 正确
    )
    3. MySQL 存储过程的参数不能指定默认值。 
    4. MySQL 存储过程不需要在 procedure body 前面加 “as”。而 SQL Server 存储过程必须加 “as” 关键字。 
    create procedure pr_add
    (
       a int,
       b int
    )
    as              -- 错误,MySQL 不需要 “as”
    begin
       mysql statement ...;
    end;
    5. 如果 MySQL 存储过程中包含多条 MySQL 语句,则需要 begin end 关键字。 
    create procedure pr_add
    (
       a int,
       b int
    )
    begin
       mysql statement 1 ...;
       mysql statement 2 ...;
    end;
    6. MySQL 存储过程中的每条语句的末尾,都要加上分号 “;” 
       ...
       declare c int;
       if a is null then
          set a = 0;
       end if;
       ...
    end;
    7. MySQL 存储过程中的注释。 
       /*
         这是个
         多行 MySQL 注释。
       */
       declare c int;     -- 这是单行 MySQL 注释 (注意 -- 后至少要有一个空格)
       if a is null then  # 这也是个单行 MySQL 注释
          set a = 0;
       end if;
       ...
    end;
    8. 不能在 MySQL 存储过程中使用 “return” 关键字。 
       set c = a + b;
       select c as sum;
       /*
       return c; -- 不能在 MySQL 存储过程中使用。return 只能出现在函数中。
       */
    end;
    9. 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()” 
    call pr_no_param();
    10. 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。 
    call pr_add(10, null);

    ===================================================

  • 相关阅读:
    NLP(二十一)根据已有文本LSTM自动生成文本
    Keras(五)LSTM 长短期记忆模型 原理及实例
    Keras(六)Autoencoder 自编码 原理及实例 Save&reload 模型的保存和提取
    NLP(二十) 利用词向量实现高维词在二维空间的可视化
    Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
    NLP(十六) DL在NLP中的应用
    Keras(三)backend 兼容 Regressor 回归 Classifier 分类 原理及实例
    ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (60000, 28, 28)
    Keras(二)Application中五款已训练模型、VGG16框架解读
    Python实现 下载IJCAI会议所有论文
  • 原文地址:https://www.cnblogs.com/uoar/p/8525910.html
Copyright © 2011-2022 走看看