【发布时间】:2021-06-04 00:38:27
【问题描述】:
在 MySQL 中,我想编写一个脚本并将多个 CREATE PROCEDURE 语句放入其中,通常的 ; 由于某种原因无法正常工作。是否有另一种方法可以在同一个脚本中运行多个 CREATE 语句?如果有,怎么做?
【问题讨论】:
在 MySQL 中,我想编写一个脚本并将多个 CREATE PROCEDURE 语句放入其中,通常的 ; 由于某种原因无法正常工作。是否有另一种方法可以在同一个脚本中运行多个 CREATE 语句?如果有,怎么做?
【问题讨论】:
其实没什么大不了的(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);
【讨论】:
在第一个过程/函数声明之前定义一个分隔符:
DELIMITER |
在第一个过程/函数声明之后关闭分隔符: |
对每个过程/函数执行相同的操作,整个脚本将作为一个运行。
所以你最终得到了这个:
DELIMITER |
script 1 text
|
DELIMITER |
script 2 text
|
DELIMITER |
script 3 text
|
【讨论】:
根据 MySQL 常见问题解答:
24.4.8: 是否可以对存储过程或存储函数进行分组 打包?
没有。 MySQL 不支持此功能 5.1.
如果你不是真的想形成一个包,你可以尝试(暂时)重新定义分隔符:
delimiter //
【讨论】: