【问题标题】:How can I check a type's dependents order to drop them and replace/modify the initial type?如何检查类型的依赖顺序以删除它们并替换/修改初始类型?
【发布时间】:2011-02-07 04:05:30
【问题描述】:

我尝试使用以下代码修改类型,它给了我错误代码:'ORA-02303'。我对 Oracle 或 PL/SQL 了解不多,但我需要解决这个问题;因此,我将不胜感激任何进一步的帮助。

提前致谢。代码只是一个例子。但话又说回来,我需要先检查它的家属。

create or replace type A as object (
  x_ number, 
  y_ varchar2(10),
  member procedure to_upper
);
/

【问题讨论】:

  • 请注意,您可能会遇到两个问题:a) TYPE 依赖项,或 b) TABLE 依赖项。

标签: database oracle plsql


【解决方案1】:

不要将 DROP 与 FORCE 一起使用,因为它会自动修改表(删除列)并且上帝知道还有什么可以验证所有内容。 使用类似的东西:

ALTER TYPE type_name DROP ATTRIBUTE attr_name INVALIDATE;
ALTER TYPE type_name ADD ATTRIBUTE attr_name varchar2(50) CASCADE;

这将适用于具有表/类型依赖关系的类型。

【讨论】:

    【解决方案2】:

    这是由 Oracle 中的基本限制造成的,这是不在数据库中使用 oracle 类型的另一个原因。

    对于“类型”依赖项,您可以:

    1. DROP TYPE mytype FORCE;
    2. 然后重新创建类型 mytype 和类型 body
    3. 然后 DROP TYPE mytype_dependent FORCE;
    4. 然后重新创建 mytype_dependent 类型和类型主体。
    5. 对所有依赖和引用类型重复。

    注意:项目 3..5 是必需的,因为依赖类型不能自动重新编译或手动“就地”编译。

    对于“表”依赖项,您必须:

    使用此处文章中的指南,其中讨论了三个相关场景。

    ORA-02303: cannot drop or replace a type with type or table dependents

    来自Annals of Oracle's Improbable Errors 博客

    【讨论】:

      【解决方案3】:

      如果您在表中使用过该类型,您应该能够通过如下查询看到它:

      select * from all_tab_columns
      where data_type_owner not in ('SYS');
      

      但我会先看看 Alex 关于使用 ALTER TYPE 的建议

      【讨论】:

        【解决方案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'
        /
        

        【讨论】:

        • 您还应该查看表依赖关系,因为它们也会阻止您重新创建类型。
        【解决方案5】:

        我确定它在某个地方的数据字典中可用,但不确定在哪里;而且您可能有很多不容易解决的依赖关系。但您也许可以修改现有类型:http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_4002.htm

        还有一个FORCE 选项,但它仍然可能使依赖对象无效。

        【讨论】:

          猜你喜欢
          • 2012-07-25
          • 2022-09-24
          • 1970-01-01
          • 1970-01-01
          • 2011-05-25
          • 2011-10-06
          • 2011-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多