我已经编写了在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查询,这会引发错误。请帮助我。
答案 0 :(得分:1)
不能在存储过程查询中直接将变量用作列名或表名。相反,您需要组成一个查询字符串并执行它。
另外,INTO var
语法需要在普通查询中排在第一位,而最后在EXECUTE
中排在最后。
您有:
select min(columnname) into evalmindate from tablename;
尝试一下:
EXECUTE 'select min('|| columnname ||') from '|| tablename ||';' INTO evalmindate;