以下代码存在长期问题,请帮助纠正此问题.先谢谢你.

Declare
l_status varchar2(10);

Begin

Insert into @table_name (ENTRP_CUST_ID_NUM, CUST_SROGT_ID, TRD_REF_NUM, CNTRY_CD)
  Select ENTRP_CUST_ID_NUM, CUST_SROGT_ID, TRD_REF_NUM, CNTRY_CD 
           from {{sourceTableLatest('Aggregation[table]')}} partition ({{getSourcePartitionNameLatest('Aggregation[table]')}});

Commit;

For i in ( Select mfu_source.Customer_Surrogate_ID CUST_SROGT_ID, Agg.TRD_REF_NUM TRD_REF_NUM, mfu_source.Enterprise_Customer_ID ENTRP_CUST_ID_NUM
          from {{sourceTableLatest('Aggregation[table]')}} partition ({{getSourcePartitionNameLatest('Aggregation[table]')}}) AGG,
          {{sourceTableLatest('mfu_table')}} partition ({{getSourcePartitionNameLatest('mfu_table')}}) mfu_source
         Where (mfu_source.TA_LINK_ID=AGG.TRD_REF_NUM or mfu_source.TRANSACTION_ID=AGG.TRD_REF_NUM)
         and trim(AGG.ENTRP_CUST_ID_NUM) is null) 
         Loop
         
         
    Update @table_name set ENTRP_CUST_ID_NUM= i.ENTRP_CUST_ID_NUM where TRD_REF_NUM=i.TRD_REF_NUM;
    
    Commit;
End Loop;

END;

上述代码需要长期解决的问题需要用简单和容易的方法来解决.

推荐答案

您可以使用单个MERGE语句(而不是在循环中使用多个语句):

Declare
  l_status varchar2(10);
Begin
  Insert into @table_name (ENTRP_CUST_ID_NUM, CUST_SROGT_ID, TRD_REF_NUM, CNTRY_CD)
  Select ENTRP_CUST_ID_NUM, CUST_SROGT_ID, TRD_REF_NUM, CNTRY_CD 
  from   {{sourceTableLatest('Aggregation[table]')}} partition ({{getSourcePartitionNameLatest('Aggregation[table]')}});

  MERGE INTO @table_name dst
  USING (
    Select mfu_source.Customer_Surrogate_ID CUST_SROGT_ID,
           Agg.TRD_REF_NUM TRD_REF_NUM,
           mfu_source.Enterprise_Customer_ID ENTRP_CUST_ID_NUM
    from   {{sourceTableLatest('Aggregation[table]')}} partition ({{getSourcePartitionNameLatest('Aggregation[table]')}}) AGG
           INNER JOIN {{sourceTableLatest('mfu_table')}} partition ({{getSourcePartitionNameLatest('mfu_table')}}) mfu_source
           ON    mfu_source.TA_LINK_ID     = AGG.TRD_REF_NUM
              or mfu_source.TRANSACTION_ID = AGG.TRD_REF_NUM
    Where  trim(AGG.ENTRP_CUST_ID_NUM) is null
  ) src
  ON dst.TRD_REF_NUM = src.TRD_REF_NUM
  WHEN MATCHED THEN
    UPDATE
    SET dst.ENTRP_CUST_ID_NUM = src.ENTRP_CUST_ID_NUM;

  Commit;
END;
/

Sql相关问答推荐

如何将varchar传递给tvf并使用该参数来查询结果SQL服务器

Postgresql在加入时显示重复的行

PG SQL中按条件聚合值

GROUP BY与多个嵌套查询T—SQL

如何用3个(半)固定位置建模团队,并有效地搜索相同/不同的团队?

使用来自不同深度的嵌套组的值执行计算的干净方法?

使用Lead获取下一个不同的日期

替换条件中的单元格值

PostgreSQL抽奖查询

数据库SQL-CTE命名空间(错误?)使用临时视图

用于SQL协助的XQUERY()

如何解决错误;ORA-00911:无效字符;在果朗?

在 PostgreSQL 中使用 ltree 列进行累积

删除行而不使数据库超载

匹配 H[0-9][0-9] 但不匹配除字母 H 之外的任何字母

Select 字段,除非另一个字段包含重复项

基于源表的 SQL INSERT、UPDATE 和 DELETE

PostgresQL-根据另一列找到 3 个最低值

如何找到特定时间间隔内的最大和最小日期?

使用 JSON_BUILD_OBJ 从 Postgres 返回 JSON