PL / pgSQL函数传递动态创建的字符串选择查询

时间:2015-01-29 14:50:24

标签: postgresql plpgsql

我坚持创建我的pl / pgsql函数。

我有类似的东西

CREATE OR REPLACE FUNCTION test(var text[][])
    RETURNS VARCHAR AS
    $BODY$
    DECLARE 
        _value VARCHAR;
        _tmp text;
    BEGIN
        _tmp  := '';
        FOR i IN 1 .. array_upper(var,1) LOOP
    _tmp := _tmp  || ' ' || var[i][1] ||  ' IS NOT DISTINCT FROM ' || var[i][2] || ' AND';
        END LOOP;

        EXECUTE 'SELECT value FROM table where $1 1=1'
        INTO _value
        USING _tmp;

RETURN _value;
END;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

然后我做

SELECT test(ARRAY[['col1', '1'], ['col2','2']])

我只是想在我的查询中添加字符串并将其作为条件运行。但我得到语法错误"其中应该是boolean"或"#34; 1""

或附近的语法错误

这样的事情是否可能?

由于

1 个答案:

答案 0 :(得分:-1)

使用数组的第一个条目初始化_tmp,然后添加任何其他条目。

CREATE OR REPLACE FUNCTION test(var text[][]) RETURNS varchar AS $BODY$
DECLARE 
    _value varchar;
    _tmp   text;
BEGIN
    _tmp  := var[1][1] ||  ' IS NOT DISTINCT FROM ' || var[1][2];
    FOR i IN 2 .. array_upper(var,1) LOOP
      _tmp := _tmp  || ' AND ' || var[i][1] ||  ' IS NOT DISTINCT FROM ' || var[i][2];
    END LOOP;

    EXECUTE 'SELECT value FROM table WHERE ' || _tmp;
    INTO _value;

    RETURN _value;
END; $BODY$ LANGUAGE plpgsql VOLATILE STRICT;