Oracle生成data patching脚本

本文介绍如何在Oracle数据库中生成data patching脚本,帮助你在数据库更新过程中进行数据修正和调整。
摘要由CSDN通过智能技术生成

生成data patching脚本

DECLARE
  V_SQL     CLOB;
  V_SUB_STR       VARCHAR2(32767);
  V_OWNER         VARCHAR2(30) := 'schema'; --'
  V_TABLE_NAME    VARCHAR2(30) := 'table_name'; --'
  V_COUNT         INTEGER := 0;
  V_TEMP_CNT      INTEGER;
  V_PK_NUM        INTEGER;
  V_FLAG_TRIM     INTEGER := 0;  --IF NOT NEED TRIM TO COMPARE THEN SET TO 0
BEGIN

  SELECT COUNT(*) CNT
    INTO V_PK_NUM
    FROM ALL_CONSTRAINTS CON
   WHERE CON.OWNER = V_OWNER
     AND CON.TABLE_NAME = V_TABLE_NAME
     AND CON.CONSTRAINT_TYPE = 'P';

  WITH UNI_IDX AS
   (SELECT INDEX_NAME, TABLE_OWNER, TABLE_NAME
      FROM ALL_INDEXES
     WHERE V_PK_NUM = 0
       AND TABLE_OWNER = V_OWNER
       AND TABLE_NAME = V_TABLE_NAME
       AND UNIQUENESS = 'UNIQUE'
       AND ROWNUM = 1),
  PK_UNI AS
   (SELECT CON_COL.COLUMN_NAME PK_COL
      FROM ALL_CONSTRAINTS CON
      JOIN ALL_CONS_COLUMNS CON_COL
        ON CON.OWNER = CON_COL.OWNER
       AND CON.TABLE_NAME = CON_COL.TABLE_NAME
       AND CON.CONSTRAINT_NAME = CON_COL.CONSTRAINT_NAME
     WHERE V_PK_NUM = 1
       AND CON.OWNER = V_OWNER
       AND CON.TABLE_NAME = V_TABLE_NAME
       AND CON.CONSTRAINT_TYPE = 'P'
    
    UNION ALL
    
    SELECT IDX_COL.COLUMN_NAME PK_COL
      FROM ALL_IND_COLUMNS IDX_COL
      JOIN UNI_IDX
        ON UNI_IDX
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值