2012-12-20 64 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;