我尝试使用以下代码修改类型,它给了我错误代码:' ORA-02303 '。我对Oracle或PL / SQL了解不多,但我需要解决这个问题。所以我对此表示感谢。
提前致谢。代码只是一个例子。但话说回来,我需要先检查一下家属。
create or replace type A as object (
x_ number,
y_ varchar2(10),
member procedure to_upper
);
/
答案 0 :(得分:4)
酌情查看DBA_DEPENDENCIES, ALL_DEPENDENCIES, or USER_DEPENDENCIES
:
SELECT OWNER, NAME, TYPE
FROM DBA_DEPENDENCIES
WHERE REFERENCED_OWNER = [type owner]
AND REFERENCED_NAME = [type name]
AND REFERENCED_TYPE = 'TYPE'
/
答案 1 :(得分:3)
不要将DROP与FORCE一起使用,因为它会自动修改表(删除列),而且上帝知道还有什么可以验证所有内容。 使用类似的东西:
ALTER TYPE type_name DROP ATTRIBUTE attr_name INVALIDATE;
ALTER TYPE type_name ADD ATTRIBUTE attr_name varchar2(50) CASCADE;
这将适用于具有表/类型依赖关系的类型。
答案 2 :(得分:2)
如果您在表格中使用了该类型,则应该可以通过以下查询查看:
select * from all_tab_columns
where data_type_owner not in ('SYS');
但我开始关注Alex关于使用ALTER TYPE
的建议答案 3 :(得分:1)
我确定它可以在某个地方的数据字典中找到,但不确定在哪里;并且您可能有很多不容易解决的依赖项。但您可以改为修改现有类型:http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_4002.htm
还有一个FORCE
选项,但仍然可以使依赖对象无效。
答案 4 :(得分:0)
这是由Oracle中的基本限制引起的,这是在数据库中不使用oracle类型的另一个原因。
对于'TYPE'依赖关系,您可以:
注意:项目3..5是必需的,因为依赖类型无法自动重新编译或“就地”手动编译。
对于'TABLE'依赖项,您必须:
使用此处文章中的指导,其中讨论了三个相关方案。
ORA-02303: cannot drop or replace a type with type or table dependents