5

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(postgresのPL/SQL)では、この同じクエリを variable で実行する方法がわかりません。これで私を助けてください。前もって感謝します

4

2 に答える 2

2

ドキュメントから(Postgres 9.1):

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

command-string は、実行するコマンドを含む (テキスト型の) 文字列を生成する式です。オプションのターゲットは、コマンドの結果が格納されるレコード変数、行変数、または単純な変数とレコード/行フィールドのコンマ区切りリストです。

言い換えると:

INTO old_ans_col_valを文字列からある場所に移動しますEXECUTE

于 2012-12-20T06:35:54.390 に答える
1

詳細については、EXECUTE を使用してください。マニュアルを参照してください。

クエリ文字列から INTO 部分を取り出して、最後に配置する必要があることに注意してください。

EXECUTE dyn_sql INTO old_ans_col_val;
于 2012-12-20T06:34:58.133 に答える