Postgresql动态SQL查询执行
我有一个函数,它使用一些If-Else条件动态生成一个SELECT查询Postgresql动态SQL查询执行,postgresql,dynamic,Postgresql,Dynamic,我有一个函数,它使用一些If-Else条件动态生成一个SELECT查询 CREATE OR REPLACE FUNCTION func_updateanswercodes(ans_id_param BIGINT, que_id_param BIGINT, overwrite_param INTEGER,
CREATE OR REPLACE FUNCTION func_updateanswercodes(ans_id_param BIGINT,
que_id_param BIGINT,
overwrite_param INTEGER,
new_ans_code_param CHARACTER VARYING)
RETURNS INTEGER AS
$BODY$
...................
................
...................
dyn_sql = 'SELECT ' || que_col_name || ' INTO old_ans_col_val FROM';
IF SUBSTR(que_col_name, 0, 8) = 'pro_ans' THEN
dyn_sql = dyn_sql || ' profile_answers JOIN registrations ON (pro_ans_frn_pro_id = reg_frn_pro_id)';
ELSIF SUBSTR(que_col_name, 0, 8) = 'reg_ans' THEN
dyn_sql = dyn_sql || ' reg_answers ';
ELSIF SUBSTR(que_col_name, 0, 8) = 'tvl_ans' THEN
dyn_sql = dyn_sql || ' tvl_answers '; --35
END IF;
dyn_sql = dyn_sql || ' WHERE';
IF SUBSTR(que_col_name, 0, 8) = 'pro_ans' THEN
dyn_sql = dyn_sql || ' reg_id ';
ELSIF SUBSTR(que_col_name, 0, 8) = 'reg_ans' THEN
dyn_sql = dyn_sql || ' reg_ans_frn_reg_id ';
ELSIF SUBSTR(que_col_name, 0, 8) = 'tvl_ans' THEN
dyn_sql = dyn_sql || ' tvl_ans_frn_reg_id ';
END IF;
dyn_sql = dyn_sql || '= ' || CAST(temp_reg AS VARCHAR) ||';'
/* Here want to execute that query in variable dync_sql
...........................
.............................
.......................
END;
$BODY$
LANGUAGE plpgsql VOLATILE
但是对于plpgsql(postgres的PL/SQL),我不知道如何在变量中执行相同的查询。请帮我做这个。
提前感谢有关详细信息,请参阅 请注意,您必须从查询字符串中取出您的INTO部分并将其放在末尾
EXECUTE dyn_sql INTO old_ans_col_val;
从文件(Postgres 9.1)中:
其中,command string是一个表达式,它生成一个包含要执行的命令的字符串(文本类型)。可选目标是
记录变量、行变量或逗号分隔的简单
变量和记录/行字段,将命令的结果输入其中
将被存储
换言之:
将
从字符串移动到旧的\u ans\u col\u val
中执行它的位置。谢谢@Daniel你能在更新查询中指导我吗。我在dyn_sql中有一个更新查询,想要设置一个列值,如何使用dyn_sql变量中的动态更新查询?
EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ] ];