2012-12-20 67 views
4

我有产生一个SELECT查询动态使用一些函数。如果.I已经存储了该查询在一个TEXT型变量作为PostgreSQL的动态SQL查询执行

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为否则条件postgres)我不知道如何在一个变量中执行相同的查询。请帮我解决一下这个 。 由于提前

回答

1

从文档(Postgres的9.1):

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

其中命令串是得到(文本类型)的字符串包含指令要执行的表达式。可选目标是 记录变量,行变量或简单的 变量和记录/行字段的逗号分隔列表,其中将存储命令 的结果。

换句话说:

从字符串移动INTO old_ans_col_val到您EXECUTE它的地方。

+0

谢谢@Daniel可以在更新查询中引导我。我在dyn_sql中有一个更新查询,并且想要设置一个列值,我怎样才能使用dyn_sql的动态更新查询变量? –

1

使用EXECUTE详细请见manual

注意,你必须把你的INTO部分进行查询字符串,并把它在最后。

EXECUTE dyn_sql INTO old_ans_col_val;