From: | Pepe TD Vo <pepevo(at)yahoo(dot)com> |
---|---|
To: | Pgsql-admin <pgsql-admin(at)postgresql(dot)org> |
Subject: | execute a procedure from another procudure? |
Date: | 2018-11-07 14:12:17 |
Message-ID: | 720744224.300433.1541599937254@mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
Hello,
Most of my posts were deleted and I don't know and actually, I'm not sure where and how to post a new question. Someone told me to join the pssql group and I received so many email post and reply from different posts and/or email pgsql-admin for new question.
Please let me know if this is not a right place to do since the forum is not as same as oracle and/or mysql.
I have script in Oracle procedure as Pragma autonomous_transaction:
CREATE OR REPLACE EDITIONABLE PROCEDURE "CIDR_STAGING"."PR_WRITE_ERROR_LOG" is PRAGMA AUTONOMOUS_TRANSACTION;begin insert into cidrmgmt.errorlog( tstamp, os_user,host,module,errorcode,errormsg) values (sysdate, v_os_user, v_host, v_module, v_ErrorCode, v_ErrorMsg ); commit;end;/
and another procedure to call transaction procedure:CREATE OR REPLACE EDITIONABLE PROCEDURE "CIDR_STAGING"."PR_MIG_STG_FORMS" ( v_Ret OUT number )as v_ErrorCode number; v_ErrorMsg varchar2(512); v_Module varchar2(32) := 'PR_MIG_STG_FORMS';begin
---- -- Simply delete the data from production table ---- delete from cidrdba.ref_forms where 1=1;
---- -- Simply copy the data from staging into production ---- insert into cidrdba.ref_forms( form_number, form_title, mig_filename ) select form_number, form_title, mig_filename from cidr_staging.stg_ref_forms; ---- -- Set the return code to 0 ---- v_Ret := SQLCODE;
pr_write_error_log( sys_context('userenv','session_user'),
sys_context('userenv','host'), v_Module,
0, 'Starting MERGE Process' );
v_Ret := 0;
----
----
--STG_REF_ACTION_CODES
----
ifv_Ret = 0 then
----
-- Perform the merge on REF_ACTION_CODES
----
pr_write_error_log( sys_context('userenv','session_user'),
sys_context('userenv','host'), v_Module,
0, 'Started merging STG_REF_ACTION_CODES' );
cidr_staging.pr_mig_stg_action_codes( v_Ret );
v_Ret := SQLCODE;
pr_write_error_log( sys_context('userenv','session_user'),
sys_context('userenv','host'), v_Module,
0, 'Finished merging STG_REF_ACTION_CODES' );
endif;
------ Exception error handler----exception when others then v_ErrorCode := SQLCODE; v_ErrorMsg := SQLERRM; v_Ret := v_ErrorCode;
---- -- Commit the record into the ErrorLog ---- pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, v_ErrorCode, v_ErrorMsg ); ---- -- Intentionally leaving the "commit" to application ----end;/
and I converted it to Postgres Pragma autonomous_transaction and I'm not sure its corrected but it didn't give any error.
create or replace FUNCTION "PR_WRITE_ERROR_LOG" ( v_os_user IN varchar(4000), v_host IN varchar(4000), v_module IN varchar(4000), v_errorcode IN int, v_errormsg IN varchar(4000) ) RETURNS VOID as $$
BEGIN START TRANSACTION; insert into cidrmgmt.errorlog( tstamp, os_user,host,module,errorcode,errormsg) values (current_timestamp, v_os_user, v_host, v_module, v_ErrorCode, v_ErrorMsg );
/* commit; */ end;$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION "CIDR_STAGING"."PR_MIG_STG_FORMS" ( v_Ret OUT int ) RETURNS integeras $$declare v_ErrorCode int; v_ErrorMsg varchar(512); v_Module varchar(32) = 'PR_MIG_STG_FORMS';
begin ---- -- Simply delete the data from production table ---- delete from cidrdba.ref_forms where 1=1;
---- -- Simply copy the data from staging into production ---- insert into cidrdba.ref_forms( form_number, form_title, mig_filename ) select form_number, form_title, mig_filename from cidr_staging.stg_ref_forms; ---- -- Set the return code to 0 ---- v_Ret := SQLCODE;
RAISE INFO 'calling "pr_write_error_log"(%)',( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, 0, 'Starting MERGE Process' );
v_Ret := 0;
---- ---- -- STG_REF_ACTION_CODES ---- if v_Ret = 0 then ---- -- Perform the merge on REF_ACTION_CODES ---- RAISE INFO 'calling "pr_write_error_log"(%)',( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, 0, 'Started merging STG_REF_ACTION_CODES' );
or?
PERFORM pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, v_ErrorCode, v_ErrorMsg );
PERFORM cidr_staging.pr_mig_stg_action_codes( v_Ret ); --> should I use RAISE INFO to call this procedure too? v_Ret := SQLCODE;
RAISE INFO 'calling "pr_write_error_log"(%)',( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, 0, 'Finished merging STG_REF_ACTION_CODES' ); end if;
or?
PERFORM pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, v_ErrorCode, v_ErrorMsg );
------ Exception error handler----exception when others then v_ErrorCode := SQLCODE; v_ErrorMsg := SQLERRM; v_Ret := v_ErrorCode; ---- -- Commit the record into the ErrorLog ----RAISE NOTICE 'Calling "CIDR_STAGING"."PR_WRITE_ERROR_LOG"(%)', ( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, v_ErrorCode, v_ErrorMsg );
orPERFORM pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, v_ErrorCode, v_ErrorMsg ); -- -- Intentionally leaving the "commit" to application ----end;$$ LANGUAGE plpgsql;
and how should I execute another function within the function like Oracle? I have searched and found parameters raise log, raise info, raise before and perform. I want to understand how to call the function w/in a function like Oracle would you please explain it?
thank you for all your help.
v/r,
Bach-Nga
No one in this world is pure and perfect. If you avoid people for their mistakes you will be alone. So judge less, love and forgive more.To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)
**Live simply **Love generously **Care deeply **Speak kindly.*** Genuinely rich *** Faithful talent *** Sharing success
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2018-11-07 14:48:24 | Re: PostgreSQL 10.5 : Strange pg_wal fill-up, solved with the shutdown checkpoint |
Previous Message | Mark Steben | 2018-11-07 14:11:06 | Re: Another streaming replication question |