如何在MySQL中组合CREATE PROCEDURE脚本

时间:2010-10-16 07:22:26

标签: mysql stored-procedures

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

3 个答案:

答案 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 //