execute a procedure from another procudure?

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

Responses

Browse pgsql-admin by date

  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