ошибка в моей первой хранимой процедуре - помогите! - PullRequest
0 голосов
/ 19 апреля 2011

это моя первая хранимая процедура. я нахожу это очень трудным для отладки. помогите мне, потратив немного времени на это

create procedure myworld.perform_target_proc(
  IN inp_usr_id integer,
  IN inp_tgt_src_id integer,
  IN inp_tgt_src_type varchar(30),
  IN inp_tgt_usr_id integer,
  IN tgt_usr_msg text,
  out tgt_res varchar(30)
)
BEGIN
  declare target_count integer
  select count(target_id) from target where usr_id=inp_usr_id and tgt_src_id=inp_tgt_src_id and tgt_src_type=inp_tgt_src_type
and tgt_usr_id=inp_tgt_usr_id into target_count
  if target_count=0 then
    begin
    insert into target(usr_id, tgt_src_id, tgt_src_type, tgt_usr_id, tgt_usr_msg) values
    (inp_usr_id, inp_tgt_src_id, inp_tgt_src_type, inp_tgt_usr_id, inp_tgt_usr_msg)
    set tgt_res = 'new target created'
    end
  else
    set tgt_res = 'target already exist'
  end if
END |

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

Похоже, вам не хватает точек с запятой.

create procedure myworld.perform_target_proc(
  IN inp_usr_id integer,
  IN inp_tgt_src_id integer,
  IN inp_tgt_src_type varchar(30),
  IN inp_tgt_usr_id integer,
  IN tgt_usr_msg text,
  out tgt_res varchar(30)
)
BEGIN
  declare target_count integer;
  select count(target_id) from target where usr_id=inp_usr_id and tgt_src_id=inp_tgt_src_id and tgt_src_type=inp_tgt_src_type
and tgt_usr_id=inp_tgt_usr_id into target_count;
  if target_count=0 then
    insert into target(usr_id, tgt_src_id, tgt_src_type, tgt_usr_id, tgt_usr_msg) values
    (inp_usr_id, inp_tgt_src_id, inp_tgt_src_type, inp_tgt_usr_id, inp_tgt_usr_msg)
    set tgt_res = 'new target created';
  else
    set tgt_res = 'target already exist';
  end if;
END |
0 голосов
/ 19 апреля 2011

Я парень SQL Server, а не MySQL, но в SQL Server это даже не скомпилируется: переменным нужен префикс @ для одной вещи. Я думаю, вы хотите

set @target_count = SELECT count(target_id)....

или, что еще лучше, избегайте локальной переменной в целом.

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