我有一个脚本,我试图使自定义函数起作用。这可能吗?
这是一个非常常见的问题,如何从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)