Thread: PERFORM statement question
Hi All, Well, I am continueing to make progress on my function to transfer or update data as required. However I have hit another snag. After I successfully create the function below I atttempt to run it with the command SELECT xfer_gl_account_data(); And get the error WARNING: Error occurred while executing PL/pgSQL function xfer_gl_account_data WARNING: line 11 at assignment ERROR: parser: parse error at or near "SELECT" at character 9 This was an error regarding not using a PERFORM statement but now the PERFORM is in there and it still won't work. I have read http://www.postgresql.org/docs/7.3/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-PERFORM to no avail. Obviously I am not using the PERFORM command peroperly but I do not understand. Hints greatly appreciated. Kind Regards, Keith CREATE OR REPLACE FUNCTION xfer_gl_account_data() RETURNS INTEGER AS ' DECLARE rcrd_gl_account RECORD; BEGIN FOR rcrd_gl_account IN SELECT data_transfer.tbl_peachtree_gl_account.account_id, data_transfer.tbl_peachtree_gl_account.description, data_transfer.tbl_peachtree_gl_account.account_type, data_transfer.tbl_peachtree_gl_account.inactive FROM data_transfer.tbl_peachtree_gl_account ORDER BY data_transfer.tbl_peachtree_gl_account.account_id LOOP PERFORM SELECT peachtree.tbl_gl_account.account_id FROM peachtree.tbl_gl_account WHERE peachtree.tbl_gl_account.account_id = rcrd_gl_account.account_id; IF NOT FOUND THEN INSERT INTO peachtree.tbl_gl_account ( peachtree.tbl_gl_account.account_id, peachtree.tbl_gl_account.description, peachtree.tbl_gl_account.account_type, peachtree.tbl_gl_account.inactive ) VALUES ( rcrd_gl_account.account_id, rcrd_gl_account.description, rcrd_gl_account.account_type, rcrd_gl_account.inactive ); ELSE UPDATE peachtree.tbl_gl_account SET peachtree.tbl_gl_account.description = rcrd_gl_account.description, peachtree.tbl_gl_account.account_type = rcrd_gl_account.account_type, peachtree.tbl_gl_account.inactive = rcrd_gl_account.inactive WHERE peachtree.tbl_gl_account.account_id = rcrd_gl_account.account_id; END IF; END LOOP; RETURN 1; END; ' LANGUAGE 'plpgsql'; ______________________________________________ 99main Internet Services http://www.99main.com
"Keith Worthington" <keithw@narrowpathinc.com> writes: > PERFORM SELECT peachtree.tbl_gl_account.account_id > FROM peachtree.tbl_gl_account > WHERE peachtree.tbl_gl_account.account_id = > rcrd_gl_account.account_id; You just want "PERFORM peachtree...", that is, the PERFORM keyword is syntactically a substitute for SELECT. The manual is not very good about this :-( ... I've tried to make it clearer in the 8.0 docs. regards, tom lane
Replying to myself: Woohoo! On a whim I changed PERFORM SELECT... to PERFORM and... something else broke. As I am sure the experienced programmers are saying "Well of course you items are over specified." Yeah, yeah. We all have to learn. :-) Fixed that and wham, it worked. Now I need to add a couple more conditionals and I will almost be there. Keith Hi All, Well, I am continueing to make progress on my function to transfer or update data as required. However I have hit another snag. After I successfully create the function below I atttempt to run it with the command SELECT xfer_gl_account_data(); And get the error WARNING: Error occurred while executing PL/pgSQL function xfer_gl_account_data WARNING: line 11 at assignment ERROR: parser: parse error at or near "SELECT" at character 9 This was an error regarding not using a PERFORM statement but now the PERFORM is in there and it still won't work. I have read http://www.postgresql.org/docs/7.3/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-PERFORM to no avail. Obviously I am not using the PERFORM command peroperly but I do not understand. Hints greatly appreciated. Kind Regards, Keith CREATE OR REPLACE FUNCTION xfer_gl_account_data() RETURNS INTEGER AS ' DECLARE rcrd_gl_account RECORD; BEGIN FOR rcrd_gl_account IN SELECT data_transfer.tbl_peachtree_gl_account.account_id, data_transfer.tbl_peachtree_gl_account.description, data_transfer.tbl_peachtree_gl_account.account_type, data_transfer.tbl_peachtree_gl_account.inactive FROM data_transfer.tbl_peachtree_gl_account ORDER BY data_transfer.tbl_peachtree_gl_account.account_id LOOP PERFORM SELECT peachtree.tbl_gl_account.account_id FROM peachtree.tbl_gl_account WHERE peachtree.tbl_gl_account.account_id = rcrd_gl_account.account_id; IF NOT FOUND THEN INSERT INTO peachtree.tbl_gl_account ( peachtree.tbl_gl_account.account_id, peachtree.tbl_gl_account.description, peachtree.tbl_gl_account.account_type, peachtree.tbl_gl_account.inactive ) VALUES ( rcrd_gl_account.account_id, rcrd_gl_account.description, rcrd_gl_account.account_type, rcrd_gl_account.inactive ); ELSE UPDATE peachtree.tbl_gl_account SET peachtree.tbl_gl_account.description = rcrd_gl_account.description, peachtree.tbl_gl_account.account_type = rcrd_gl_account.account_type, peachtree.tbl_gl_account.inactive = rcrd_gl_account.inactive WHERE peachtree.tbl_gl_account.account_id = rcrd_gl_account.account_id; END IF; END LOOP; RETURN 1; END; ' LANGUAGE 'plpgsql'; ______________________________________________ 99main Internet Services http://www.99main.com