问题描述:
在日常开发中,我们会创建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: 无法使用类型或表的相关性来删除或取代一个类型
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>