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