Невозможно передать параметр внутри хранимой процедуры в красном смещении

Я написал процедуру, которая вызывает параметр в запросе выбора, но она не работает. Когда я печатаю этот параметр, он работает нормально, но с запросом выбора он не работает.

Я использовал верстак Aginity для красного смещения для выполнения хранимой процедуры.

CREATE or replace PROCEDURE get_tbl_name(IN tablename varchar, IN columnname VARCHAR, IN mindate varchar) AS $$
Declare
evalmindate varchar;
BEGIN
Raise info 'tablename = %, columnname = %, mindate = %', tablename,columnname,mindate;
if mindate is null then
select min(columnname) into evalmindate from tablename;
else
evalmindate=mindate;
end if;
END;
$$ LANGUAGE plpgsql;

Calling Proc:
call get_tbl_name('test_bq', 'date',NULL);

Output:
tablename = test_bq, columnname = date, mindate = <NULL>
Error Message
42601: syntax error at or near "$2"

На выходе мы можем видеть параметр внутри процедуры, когда я печатаю, но я не могу передать параметр в запрос выбора, он выдает ошибку. Пожалуйста, помогите мне с этим.


person Venugopal Seetharaman    schedule 12.08.2019    source источник
comment
начинать с select min(columnname) into evalmindate from tablename; неправильно, вы не используете переменные, буквально вы пытаетесь запросить columnname в таблице с именем tablename   -  person demircioglu    schedule 13.08.2019
comment
@ mdem7 Даже если я передаю параметр переменной и передаю переменную для выбора запроса, он не работает. Получение такой же ошибки.   -  person Venugopal Seetharaman    schedule 13.08.2019


Ответы (1)


Вы не можете использовать переменную в качестве имени столбца или таблицы непосредственно в запросе хранимой процедуры. Вместо этого вам нужно составить строку запроса и выполнить ее.

Также синтаксис INTO var должен быть первым в простом запросе и последним в EXECUTE.

У вас есть:

select min(columnname) into evalmindate from tablename;

Попробуй это:

EXECUTE 'select min('|| columnname ||') from '|| tablename ||';' INTO evalmindate;
person Joe Harris    schedule 14.08.2019