Используйте параметр IN в предложении WHERE внутри хранимой процедуры MySQL

0


Я использую MySQL с HeidiSQL, и я хочу создать хранимую процедуру, которая принимает один параметр String и возвращает таблицу. Вот что я пробовал:

CREATE PROCEDURE sp(IN in_param VARCHAR(50))
BEGIN
  SELECT * FROM fact_table ft
  WHERE ft.param = @in_param
END

И я назвал это следующим образом:

CALL sp('string_param');

Процедура возвращает пустую таблицу, так как @in_param как-то NULL внутри SP.

Мне также нравится: WHERE ft.param = in_param, но я получил сообщение об ошибке, когда я его запустил, говоря SQL Error (1054): Unknown column 'in_param' in 'where clause'

Может ли кто-нибудь сказать мне, что я делаю неправильно?

PS: Я попытался создать его вручную, а также с помощью Heidi Create new → Хранимый мастер подпрограммы

  • 0
    Когда я выбираю и т. Д. В хранимой процедуре MySQL, у меня обычно нет символа @ перед переменной - также вы ожидаете, что хранимая процедура будет возвращать строки - по умолчанию она этого не сделает.
  • 0
    Ну, я попытался изменить его, чтобы удалить in_param, а затем удалил предложение WHERE, и у него не было проблем с возвратом результата выбора.
Показать ещё 2 комментария
Теги:
stored-procedures
heidisql
parameter-passing

1 ответ

0

Я наконец нашел решение, которое работает:

CREATE PROCEDURE sp(IN in_param VARCHAR(50))
BEGIN
  DECLARE declared_in_param CHAR(50);
  SET declared_in_param = in_param;
  SELECT * FROM fact_table ft
  WHERE ft.param = declared_in_param;
END

Итак, идея заключалась в том, чтобы объявить и установить новую переменную в этот параметр IN и использовать эту объявленную переменную в предложении WHERE инструкции SELECT.

У меня не было времени на исследование, ПОЧЕМУ это работает, но я буду

Ещё вопросы

Сообщество Overcoder
Наверх
Меню