• ORA-02303: 无法使用类型或表的相关性来删除或取代一个类型


    问题描述:

             在日常开发中,我们会创建Type和对应的TAB供其他数据库对象使用,如果对象引用了该Type,则对其修改(CREATE OR REPLACE TYPE)时会出现如下错误,ORA-02303: 无法使用类型或表的相关性来删除或取代一个类型 。


    举例:

    SQL> CREATE OR REPLACE TYPE typ_payment_order_result AS OBJECT
      2  (
      3    id                  NUMBER,
      4    id_outgoing_payment VARCHAR2(30),
      5    id_credit           NUMBER,
      6    contract_no         VARCHAR2(20),
      7    good_category       VARCHAR2(100)
      8  )
      9  ;
     10  /
    CREATE OR REPLACE TYPE typ_payment_order_result AS OBJECT
    (
      id                  NUMBER,
      id_outgoing_payment VARCHAR2(30),
      id_credit           NUMBER,
      contract_no         VARCHAR2(20),
      good_category       VARCHAR2(100)
    )
    ;
    ORA-02303: 无法使用类型或表的相关性来删除或取代一个类型

    因为该Type有其他对象引用,故对其进行修改时会出上面的错误,查看其依赖关系,可看到如下的依赖:

    SQL> SELECT t.name,
      2         t.type,
      3         t.referenced_name,
      4         t.referenced_type
      5    FROM all_dependencies t
      6   WHERE t.referenced_name = 'TYP_PAYMENT_ORDER_RESULT';
    NAME                           TYPE               REFERENCED_NAME                                                  REFERENCED_TYPE
    ------------------------------ ------------------ ---------------------------------------------------------------- ------------------
    TAB__PAYMENT_ORDER_RESULT      TYPE               TYP_PAYMENT_ORDER_RESULT                                         TYPE
    TAB_PAYMENT_ORDER_RESULT       TYPE               TYP_PAYMENT_ORDER_RESULT                                         TYPE
    PKG_INSTAN_PAYMENT             PACKAGE            TYP_PAYMENT_ORDER_RESULT                                         TYPE
    PKG_INSTAN_PAYMENT             PACKAGE BODY       TYP_PAYMENT_ORDER_RESULT                                         TYPE
    
    SQL>

    解决办法:

          使用Force选项解决。

    SQL> CREATE OR REPLACE TYPE typ_payment_order_result FORCE AS OBJECT
      2  (
      3    id                  NUMBER,
      4    id_outgoing_payment VARCHAR2(30),
      5    id_credit           NUMBER,
      6    contract_no         VARCHAR2(20),
      7    good_category       VARCHAR2(100)
      8  )
      9  ;
     10  /
    Type created
    
    SQL> 



  • 相关阅读:
    排序算法-总览
    MySQL插入大批量测试数据
    【剑指offer】面试的流程
    并发编程-内置锁
    并发编程-使用线程安全类
    规约先行-(二十一)设计规约
    规约先行-(二十)服务器
    [转]web.xml什么时候被加载进内存的
    DOM和BOM的理解
    代理&反向代理
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975747.html
Copyright © 2020-2023  润新知