Postgresql 动态更新查询执行

标签 postgresql dynamic

我有一个 plpgsql block ,它生成一个动态更新查询:

 CREATE OR REPLACE FUNCTION fun_lenght_test () RETURNS VOID AS $BODY$
    BEGIN
    /*
    some code here
    */
    dyn_sql = 'UPDATE';
                            IF SUBSTR(que_col_name, 0, 8)   = 'pro_ans' THEN
                                dyn_sql = dyn_sql ||    ' profile_answers ';
                            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 ';
                            END IF;

                                dyn_sql = dyn_sql|| 'SET' || ' ' || que_col_name || ' = ' || NEW_VALUE_FOR_COLUMN ;

                                dyn_sql = dyn_sql || ' WHERE' ;

                            IF SUBSTR(que_col_name, 0, 8) = 'pro_ans' THEN
                                dyn_sql = dyn_sql || ' pro_ans_frn_pro_id = (SELECT pro_ans_frn_pro_id FROM profile_answers JOIN registrations ON (pro_ans_frn_pro_id = reg_frn_pro_id) WHERE reg_id ';
                            ELSIF SUBSTR(que_col_name, 0, 8) = 'reg_ans' THEN
                                dyn_sql = dyn_sql || ' reg_answers WHERE reg_ans_frn_reg_id ';
                            ELSIF SUBSTR(que_col_name, 0, 8) = 'tvl_ans' THEN
                                dyn_sql = dyn_sql || ' tvl_answers WHERE tvl_ans_frn_reg_id ';
                            END IF;

                            IF SUBSTR(que_col_name, 0, 8) = 'pro_ans' THEN  
                            dyn_sql = dyn_sql || '= ' || CAST(temp_reg AS VARCHAR) || ');';
                            ELSE
                            dyn_sql = dyn_sql || '= ' || CAST(temp_reg AS VARCHAR) || ';';

 /* want to execute this update dynamic query */
/*
some code here

*/
END;
$BODY$
LANGUAGE plpgsql

你能帮我执行这个动态更新查询吗? 提前致谢。

最佳答案

创建或替换函数 fun_lenght_test () 返回无效 $ body $

DECLARE
dyn_sql varchar;
BEGIN
/*
some code here
*/
dyn_sql = 'UPDATE';
                 IF SUBSTR(que_col_name, 0, 8)   = 'pro_ans' THEN
                            dyn_sql = dyn_sql ||    ' profile_answers ';
                  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 ';
                  END IF;

                            dyn_sql = dyn_sql|| 'SET' || ' ' || que_col_name || ' = ' || NEW_VALUE_FOR_COLUMN ;

                            dyn_sql = dyn_sql || ' WHERE' ;

                        IF SUBSTR(que_col_name, 0, 8) = 'pro_ans' THEN
                            dyn_sql = dyn_sql || ' pro_ans_frn_pro_id = (SELECT pro_ans_frn_pro_id FROM profile_answers JOIN registrations ON (pro_ans_frn_pro_id = reg_frn_pro_id) WHERE reg_id ';
                        ELSIF SUBSTR(que_col_name, 0, 8) = 'reg_ans' THEN
                            dyn_sql = dyn_sql || ' reg_answers WHERE reg_ans_frn_reg_id ';
                        ELSIF SUBSTR(que_col_name, 0, 8) = 'tvl_ans' THEN
                            dyn_sql = dyn_sql || ' tvl_answers WHERE tvl_ans_frn_reg_id ';
                        END IF;

                        IF SUBSTR(que_col_name, 0, 8) = 'pro_ans' THEN  
                        dyn_sql = dyn_sql || '= ' || CAST(temp_reg AS VARCHAR) || ');';
                        ELSE
                        dyn_sql = dyn_sql || '= ' || CAST(temp_reg AS VARCHAR) || ';';
            END IF;

结束; $BODY$ LANGUAGE plpgsql

很抱歉知道你想要什么,但这可以运行...

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

相关文章:

sql - 复合类型的多个插入

c++ - 如何创建 const 指针的动态数组?

javascript - 创建动态模型

python - 动态调用方法(如果 Django 中存在)

android - 如何根据给定的计数动态添加单选按钮?

javascript - 当事务中的任务使用 pg-promise 失败时如何回滚事务

mysql - 需要一个将postgres数据库转换为mysql的工具

performance - 为什么我的日期维度表没用? (对 PostgreSQL 存储的困惑...)

sql - 在 SQL 查询中运行 for 循环

angular - 从另一个 url-angular4 加载动态模块