我坚持创建我的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""
或附近的语法错误这样的事情是否可能?
由于
答案 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;