zoukankan      html  css  js  c++  java
  • Mysql之存储过程

    1.进入到数据库中查看 是否有相关的存储过程数据
      show procedure status where Db='test';
     
    2. 创建简单的存储过程
      create procedure hi() select 'hello';
     
    3. 调用存储过程
      call hi();
     
    事例:
     
     
     
    三、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 存储过程中的注释。 
       
       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;
      
    end;
     
    9. 调用 MySQL 存储过程时候,需要在过程名字后面加“()”,即使没有一个参数,也需要“()” 
      call pr_no_param();
     
    10. 因为 MySQL 存储过程参数没有默认值,所以在调用 MySQL 存储过程时候,不能省略参数。可以用 null 来替代。 
      call pr_add(10, null);

    事例:

      1) 批量的插入数据

    delimiter $$
    drop PROCEDURE if EXISTS product;
    CREATE PROCEDURE product ()
    BEGIN
    
    DECLARE i INT ;
    SET i = 1 ;
    WHILE i < 100 DO
        INSERT INTO `hotel_room_type` (
            `channel`,
            `shop_id`,
            `hid`,
            `name`
        )
    VALUES
        (
            '1001',
            '155',
            '61',
            i
        ) ;
    SET i = i + 1 ;
    END
    WHILE ;
    END $$
    
    delimiter ; 
    CALL product();

      注意点: 严格按照要求的格式来书写SQL语句,否则无法执行

  • 相关阅读:
    CodeForces 288A Polo the Penguin and Strings (水题)
    CodeForces 289B Polo the Penguin and Matrix (数学,中位数)
    CodeForces 289A Polo the Penguin and Segments (水题)
    CodeForces 540C Ice Cave (BFS)
    网站后台模板
    雅图CAD
    mbps
    WCF学习-协议绑定
    数据库建表经验总结
    资源位置
  • 原文地址:https://www.cnblogs.com/xingxia/p/mysql_procedure.html
Copyright © 2011-2022 走看看