1

I have a plpgsql block which generates a dynamic update query as :

 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

Can you please help me executing this dynamic Update query . Thanks In advance.

1
  • What is the postgresql version? Commented Dec 20, 2012 at 11:25

1 Answer 1

1

CREATE OR REPLACE FUNCTION fun_lenght_test () RETURNS VOID AS $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;

END; $BODY$ LANGUAGE plpgsql

I am sorry to know what do you want, but this can run...

Sign up to request clarification or add additional context in comments.

3 Comments

At Last This dyn_sql contains a Update Query as per the If and Else condition , I want to execute this update query.
It seems that you forget to declare the type of dyn_sql and 'END IF;' statement at the end of the last if ...
Srry for my posting it is working and thanks a lot for directing me to my mistake.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.