在日常开发中,我们会创建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>
标签:或表,ORDER,id,VARCHAR2,RESULT,02303,TYPE,PAYMENT,ORA
From: https://www.cnblogs.com/lgx5/p/17760162.html