我有一个函数,在函数内部我创建变量。我想将创建的变量用作过滤的阈值。
CREATE OR REPLACE FUNCTION someF(a integer, b integer, c integer)
RETURNS void AS
$$
DECLARE
problematicVariable float := $1 / $2;
BEGIN
FOR i in 1 .. $3:
CREATE TABLE IF NOT EXISTS someTable AS
SELECT someFunction(
'SELECT id,
FROM yetAnotherTable st
WHERE st.agg <= problematicVariable')
END LOOP;
END
$$
language 'plpgsql';
但是,我收到的错误是:
ERROR: column "problematicVariable" does not exist
我怎么告诉postgres这不是一个列而是一个我在函数体中创建的变量?
答案 0 :(得分:1)
问题是名称 problematicVariable
在someFunction()
中被解释,显然没有定义。由于这是一个稳定的调用(函数参数总是相同所以每次调用都会从函数返回相同的数据,假设不依赖于volatile值)你最好把它从循环中取出并调用{{1}重复使用第一个函数调用的结果。
someF()