Как мне объединить сценарии CREATE PROCEDURE в MySQL - PullRequest
3 голосов
/ 16 октября 2010

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

Ответы [ 3 ]

4 голосов
/ 16 октября 2010

не так много на самом деле (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 голос
/ 21 марта 2013

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

DELIMITER |

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

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

Итак, в итоге вы получите:

DELIMITER |
 script 1 text
|

DELIMITER |
 script 2 text
|

DELIMITER |
 script 3 text
|
0 голосов
/ 16 октября 2010

Согласно MySQL FAQ:

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

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

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

delimiter //
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...