无法在redshift中的存储过程中传递参数
Posted
技术标签:
【中文标题】无法在redshift中的存储过程中传递参数【英文标题】:Cannot pass parameter inside stored procedure in redshift 【发布时间】:2019-08-12 13:44:05 【问题描述】:我已经编写了在选择查询中调用参数的过程,但它不起作用。当我打印该参数时,它工作正常,但使用选择查询时,它不起作用。
我已经使用 Aginity 工作台 for 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 min(columnname) into evalmindate from tablename;
开头是不正确的,您没有使用变量,实际上您是在尝试在名为tablename
的表中查询columnname
@mdem7 即使我将参数传递给变量并将变量传递给选择查询,它也不起作用。得到同样的错误。
【参考方案1】:
您不能在存储过程查询中直接将变量用作列名或表名。相反,您需要编写一个查询字符串并执行它。
此外,INTO var
语法需要在普通查询中排在第一位,在EXECUTE
中最后。
你有:
select min(columnname) into evalmindate from tablename;
试试这个:
EXECUTE 'select min('|| columnname ||') from '|| tablename ||';' INTO evalmindate;
【讨论】:
以上是关于无法在redshift中的存储过程中传递参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Redshift 中的 select 语句中使用存储过程