как запустить объединение таблиц в функции postgres - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть скрипт, и я попытался заставить работать пользовательскую функцию. Это возможно?

Очень часто задаваемый вопрос: как сделать таблицу из другой функции схемы в Postgres? что ORACLE называет MERGE INTO ... USING и стандарт поддерживает как часть операции MERGE в Postgres, но каким-то образом 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: MERGE INTO cidrdba.sc_date_in prod ^ Состояние SQL: 42601 Персонаж: 347

V / R,

Бах Нга

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...