无法在Redshift中的存储过程中传递参数

时间:2019-08-12 13:44:05

标签: sql stored-procedures amazon-redshift

我已经编写了在select查询中调用参数的过程,但是它不起作用。当我打印该参数时,它工作正常,但是使用select查询时,它却无法工作。

我已使用Aginity工作台进行Redshift执行存储过程。

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"

从输出中,我们可以在打印时在过程内看到参数,但是无法将参数传递给select查询,这会引发错误。请帮助我。

1 个答案:

答案 0 :(得分:1)

不能在存储过程查询中直接将变量用作列名或表名。相反,您需要组成一个查询字符串并执行它。

另外,INTO var语法需要在普通查询中排在第一位,而最后EXECUTE中排在最后。

您有:

select min(columnname) into evalmindate from tablename;

尝试一下:

EXECUTE 'select min('|| columnname ||') from '|| tablename ||';' INTO evalmindate;