【问题标题】:How do I combine CREATE PROCEDURE scripts in MySQL如何在 MySQL 中组合 CREATE PROCEDURE 脚本
【发布时间】:2021-06-04 00:38:27
【问题描述】:

在 MySQL 中,我想编写一个脚本并将多个 CREATE PROCEDURE 语句放入其中,通常的 ; 由于某种原因无法正常工作。是否有另一种方法可以在同一个脚本中运行多个 CREATE 语句?如果有,怎么做?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    其实没什么大不了的(foo.sql)

    你可以使用\从mysql命令行运行它。 foo.sql

    use foo_db;
    
    -- TABLES
    
    drop table if exists users;
    create table users
    (
    user_id int unsigned not null auto_increment primary key,
    username varbinary(32) unique not null,
    created_date datetime not null
    )
    engine=innodb;
    
    -- PROCEDURES
    
    drop procedure if exists list_users;
    
    delimiter #
    
    create procedure list_users()
    proc_main:begin
      select * from users order by username; 
    end proc_main #
    
    delimiter ;
    
    drop procedure if exists get_user;
    
    delimiter #
    
    create procedure get_user
    (
    p_user_id int unsigned
    )
    proc_main:begin
        select * from users where user_id = p_user_id;
    end proc_main #
    
    delimiter ;
    
    -- TEST DATA
    
    insert into users (username, created_date) values
      ('f00',now()),('bar',now()),('alpha',now()),('beta',now());
    
    -- TESTING
    
    call list_users();
    
    call get_user(1);
    

    【讨论】:

      【解决方案2】:

      在第一个过程/函数声明之前定义一个分隔符:

      DELIMITER |
      

      在第一个过程/函数声明之后关闭分隔符: |

      对每个过程/函数执行相同的操作,整个脚本将作为一个运行。

      所以你最终得到了这个:

      DELIMITER |
       script 1 text
      |
      
      DELIMITER |
       script 2 text
      |
      
      DELIMITER |
       script 3 text
      |
      

      【讨论】:

        【解决方案3】:

        根据 MySQL 常见问题解答:

        24.4.8: 是否可以对存储过程或存储函数进行分组 打包?

        没有。 MySQL 不支持此功能 5.1.

        如果你不是真的想形成一个包,你可以尝试(暂时)重新定义分隔符:

        delimiter //
        

        【讨论】:

          猜你喜欢
          • 2019-03-30
          • 2018-04-14
          • 2014-02-18
          • 2022-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多