PL / pgSQL函数中的引用变量

时间:2016-12-18 12:15:07

标签: sql postgresql plpgsql

我有一个函数,在函数内部我创建变量。我想将创建的变量用作过滤的阈值。

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这不是一个列而是一个我在函数体中创建的变量?

1 个答案:

答案 0 :(得分:1)

问题是名称 problematicVariablesomeFunction()中被解释,显然没有定义。由于这是一个稳定的调用(函数参数总是相同所以每次调用都会从函数返回相同的数据,假设不依赖于volatile值)你最好把它从循环中取出并调用{{1}重复使用第一个函数调用的结果。

someF()