gpt4 book ai didi

Postgresql 动态 SQL 查询执行

转载 作者:行者123 更新时间:2023-11-29 11:29:31 25 4
gpt4 key购买 nike

我有一个使用一些 If Else 条件动态生成 SELECT 查询的函数。我将该查询存储在 TEXT 类型变量中作为

    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(PL/SQL for postgres),我不知道如何在变量中执行相同的查询。请在这件事上给予我帮助 。提前致谢

最佳答案

来自文档(Postgres 9.1):

EXECUTE command-string [ INTO [STRICT] target ] [ USING expression [, ... ] ];

where command-string is an expression yielding a string (of type text) containing the command to be executed. The optional target is a record variable, a row variable, or a comma-separated list of simple variables and record/row fields, into which the results of the command will be stored.

换句话说:

将字符串中的 INTO old_ans_col_val 移动到您EXECUTE 的位置。

关于Postgresql 动态 SQL 查询执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13966168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com