• 在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);

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

  • 相关阅读:
    30个Python常用极简代码,拿走就用
    如果只写一行代码能实现什么?看完我彻底服了
    面试官问我:用了HTTPS就安全了吗?用了HTTPS会被抓包吗?我竟然回答不上来......
    程序员常见的口头禅
    没有心仪的offer,要不要找一个工作先凑合?
    微信新出“拍了拍”功能!
    UVa 340 Master-Mind Hints
    UVa 575 Skew Binary 歪斜二进制
    UVa 10250 The Other Two Trees
    UVa 10106 Product
  • 原文地址:https://www.cnblogs.com/uoar/p/8525910.html
Copyright © 2020-2023  润新知