как передать параметр хранимой процедуры в выбранный список? - PullRequest
0 голосов
/ 10 октября 2011

у меня есть следующая хранимая процедура mysql

create procedure SP_InsertTag_Level2 (tag_v varchar(50),  CNT_v int)
      select tweet_id into @tid from tweet_tags where tag=tag_v;
      <b>insert into collected_tags (tag,country) select <i>tag_v</i>, A.country from collected_tags A, tweet_tags B where A.tag=B.tag and B.tweet_id=@tid;</b>
      select id into @Id from collected_tags where tag=tag_v;
      IF @Id IS NOT NULL THEN
        insert into stats_tag(id,counter) values (@id,CNT_v);
      END IF;
      end;

теперь я получаю ошибку ERROR 1054 (42S22): Unknown column 'tag_v' in 'field list' для жирной строки выше, так как tag_v не является столбцом в таблице собрано_ тегах (это параметр в SP)
как сохранить (вставить) переменную в выбранном списке столбцов хранимой процедуры?

1 Ответ

2 голосов
/ 10 октября 2011

Вам нужно запустить тело хранимой процедуры с BEGIN.
Также я бы рекомендовал не использовать @vars в хранимых процедурах, потому что они просачиваются наружу. Лучше использовать типизированные объявленные переменные.

Чтобы успешно закрыть сохраненный процесс, вам нужно объявить пользовательский разделитель.
И используйте это, чтобы закрыть финал END

DELIMITER $$

CREATE PROCEDURE SP_InsertTag_Level2 (IN tag_v varchar(50), IN CNT_v int)
BEGIN
  DECLARE tid INTEGER;
  DECLARE myid INTEGER;
  SELECT tweet_id INTO tid FROM tweet_tags WHERE tag=tag_v;
  INSERT INTO collected_tags (tag,country) 
     SELECT tag_v, A.country 
     FROM collected_tags A
     INNER JOIN tweet_tags B on (A.tag = B.tag)
     WHERE B.tweet_id = tid
  SELECT id INTO myId FROM collected_tags WHERE tag=tag_v;
  IF (myId IS NOT NULL) THEN
    INSERT INTO stats_tag(id,counter) VALUES (myid,CNT_v);
  END IF;
END $$

DELIMITER ;

Неявные объединения злы
Не используйте неявные объединения, они являются антишаблоном, вместо этого используйте явный синтаксис объединения.

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