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>
分类:
Oracle
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤