Я использую 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 → Хранимый мастер подпрограммы
Я наконец нашел решение, которое работает:
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.
У меня не было времени на исследование, ПОЧЕМУ это работает, но я буду