如何在postgres函数中运行合并表

时间:2018-11-07 19:46:49

标签: postgresql

我有一个脚本,我试图使自定义函数起作用。这可能吗?

这是一个非常常见的问题,如何从Postgres中的另一个架构函数合并表?这就是ORACLE所谓的合并到...使用 并且该标准作为Postgres中MERGE操作的一部分提供支持,但是PostgreSQL不知何故不支持它和/或识别该变量。你会怎么做?请考虑以下内容:

CREATE OR REPLACE FUNCTION "CIDR_STAGING"."PR_MIG_STG_DATE_IN" (
v_Ret OUT int ) RETURNS integer
as $$

declare 
        v_ErrorCode             int;
        v_ErrorMsg              varchar(512);
        v_Module                varchar(32) = 'PR_MIG_STG_DATE_IN';

begin
   ----
   -- MERGING: STG_DATE_IN into SC_DATE_IN
   ----
   MERGE INTO cidrdba.sc_date_in prod
   USING (
           SELECT Receipt_Number,date_in, mig_filename,mig_insert_dt,mig_modified_dt
           FROM cidr_staging.STG_Date_In
           ORDER by mig_seq
           ) AS stg
   ON ( prod.receipt_number = stg.receipt_number )
   WHEN MATCHED THEN UPDATE SET
   --   prod.Receipt_Number     = stg.Receipt_Number,
      prod.Date_In                      = stg.Date_In,
      prod.mig_filename                 = stg.mig_filename,
      --prod.mig_insert_dt                = stg.mig_insert_dt,
      --prod.mig_modified_dt              = stg.mig_modified_dt
      prod.mig_modified_dt              = current_timestamp
   WHEN NOT MATCHED THEN INSERT
           (
                   prod.Receipt_Number,
                   prod.Date_In,
                   prod.mig_filename,
                   prod.mig_insert_dt,
                   prod.mig_modified_dt
           ) SELECT (
                   stg.Receipt_Number,
                   stg.Date_In,
                   stg.mig_filename,
                   current_timestamp,
                   --stg.mig_insert_dt,
                   null
                   --stg.mig_modified_dt
           )
   ;

   ----
        -- Set the return code to 0
        ----
        v_Ret := SQLCODE;

----
-- Exception error handler
----
exception
   when others then
           v_ErrorCode := SQLCODE;
                v_ErrorMsg  := SQLERRM;

                v_Ret       := v_ErrorCode;

                ----
                -- Commit the record into the ErrorLog
                ----
             PERFORM 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;

错误:“ cidrdba.sc_date_in”不是已知变量 第14行:合并到cidrdba.sc_date_in产品中                        ^ SQL状态:42601 角色:347

v / r,

巴赫(Bach Nga)

0 个答案:

没有答案
相关问题