MYSQL - Синтаксис для создания процедуры? - PullRequest
0 голосов
/ 09 ноября 2011

Я пытаюсь создать хранимую процедуру, но она не удалась, и я не знаю почему?Запрос:

delimiter //
drop  procedure if exists sp_edit_booking_owner;
create procedure sp_edit_booking_owner(v_pnr varchar(32), v_login varchar(200))

begin 
declare l_iduser int(11) default null; 

SELECT id_user INTO l_iduser FROM users WHERE userlogin = v_login;

if l_iduser is not null then                  

update book set iduser_c = l_iduser where bookingref = v_pnr;
update seg s join book b on s.id_book = b.id_book set s.id_user = l_iduser where b.bookingref = v_pnr;
update segmentown so join seg s on s.id_seg = so.id_seg join book b on s.id_book = b.id_book set so.id_user = l_iduser where b.bookingref = v_pnr;
update historyb hb join seg s on s.id_seg = hb.id_seg join book b on s.id_book = b.idbooking join users u on u.iduser = s.id_user_m set hb.eventowner = u.username where b.bookingref = v_pnr and  hb.event not like '%USER%';
update historyb hb join seg s on s.id_seg = hb.id_seg join book b on s.id_book = b.idbook join users u on u.id_user = s.id_user_m set hb.event = concat(u.username, '(USER)') where b.bookingpnr = v_pnr and  hb.event like '%USER%';

end if;

end;
//
delimiter ;

Возможно, это проблема с синтаксом, но я не могу сказать откуда ... У кого-то есть идея?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 09 ноября 2011

Если вы меняете разделитель, вам нужно использовать его, пока вы не измените его снова

delimiter //
drop  procedure if exists sp_edit_booking_owner //
create procedure sp_edit_booking_owner(v_pnr varchar(32), v_login varchar(200))
...

Исправьте это, я могу создать его на MySQL, который я использую

1 голос
/ 09 ноября 2011

Используйте этот код:

его работы;)


delimiter //
drop  procedure if exists sp_edit_booking_owner//
create procedure sp_edit_booking_owner(IN v_pnr varchar(32),IN v_login varchar(200))

begin 
declare l_iduser int(11) default null; 

SELECT id_user INTO l_iduser FROM users WHERE userlogin = v_login;

if l_iduser is not null then                  

update book set iduser_c = l_iduser where bookingref = v_pnr;
update seg s join book b on s.id_book = b.id_book set s.id_user = l_iduser where b.bookingref = v_pnr;
update segmentown so join seg s on s.id_seg = so.id_seg join book b on s.id_book = b.id_book set so.id_user = l_iduser where b.bookingref = v_pnr;
update historyb hb join seg s on s.id_seg = hb.id_seg join book b on s.id_book = b.idbooking join users u on u.iduser = s.id_user_m set hb.eventowner = u.username where b.bookingref = v_pnr and  hb.event not like '%USER%';
update historyb hb join seg s on s.id_seg = hb.id_seg join book b on s.id_book = b.idbook join users u on u.id_user = s.id_user_m set hb.event = concat(u.username, '(USER)') where b.bookingpnr = v_pnr and  hb.event like '%USER%';

end if;

end//

delimiter ;

0 голосов
/ 21 ноября 2011

Спасибо за ваши ответы.На самом деле это не было ничего плохого в моем первом запросе.

Вы просто должны выполнить этот запрос через терминал (mysql в командной строке).

Еще раз спасибо.

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