2010-10-16 6 views
3

В MySQL я хочу написать скрипт и поместить в него несколько инструкций CREATE PROCEDURE, по какой-то причине обычная (;) не работает. Есть ли другой способ запустить несколько операторов CREATE в одном скрипте? Если да, то как?Как объединить скрипты CREATE PROCEDURE в MySQL

ответ

0

Согласно MySQL FAQ:

24.4.8: Можно группировать хранимые процедуры или функции в пакеты?

№ Это не поддерживается в MySQL 5.1.

Если вы на самом деле не пытается сформировать пакет, вы можете попробовать (временно) переопределение разделитель:

delimiter // 
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

Перед объявлением первой процедуры/функции определить разделитель, таким образом:

DELIMITER | 

После объявления первой процедуры/функции закрыть разделитель: |

Сделайте то же самое для каждой процедуры/функции, и весь скрипт будет работать как один.

Таким образом, вы в конечном итоге с этим:

DELIMITER | 
script 1 text 
| 

DELIMITER | 
script 2 text 
| 

DELIMITER | 
script 3 text 
| 
Смежные вопросы