Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何检查类型';s的从属项是否要删除它们并替换/修改初始类型?_Database_Oracle_Plsql - Fatal编程技术网

Database 如何检查类型';s的从属项是否要删除它们并替换/修改初始类型?

Database 如何检查类型';s的从属项是否要删除它们并替换/修改初始类型?,database,oracle,plsql,Database,Oracle,Plsql,我试图使用以下代码修改一个类型,但它给出了错误代码:“ORA-02303”。我不太了解Oracle或PL/SQL,但我需要解决这个问题;因此,我非常感谢您在这方面的进一步帮助 提前谢谢。代码只是一个示例。但是,我需要先检查它的家属 create or replace type A as object ( x_ number, y_ varchar2(10), member procedure to_upper ); / 我肯定它在数据字典的某个地方可以找到,但不确定它在哪里;而且

我试图使用以下代码修改一个类型,但它给出了错误代码:“ORA-02303”。我不太了解Oracle或PL/SQL,但我需要解决这个问题;因此,我非常感谢您在这方面的进一步帮助

提前谢谢。代码只是一个示例。但是,我需要先检查它的家属

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

我肯定它在数据字典的某个地方可以找到,但不确定它在哪里;而且你可能有很多不容易解决的依赖关系。但您可以改为修改现有类型:


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

查看
DBA\u依赖项、所有\u依赖项或用户\u依赖项,视情况而定:

SELECT OWNER, NAME, TYPE
  FROM DBA_DEPENDENCIES 
 WHERE REFERENCED_OWNER = [type owner]
   AND REFERENCED_NAME  = [type name]
   AND REFERENCED_TYPE  = 'TYPE'
/

如果在表中使用了该类型,则应该能够通过以下查询查看该类型:

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

但是我首先要看Alex关于使用ALTER TYPE的建议,这是由Oracle中的基本限制引起的,这是不在数据库中使用Oracle类型的另一个原因

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

  • 滴型力
  • 然后重新创建类型mytype和类型body
  • 然后下降型mytype_依赖力
  • 然后重新创建mytype_依赖的类型和类型主体
  • 对所有依赖类型和引用类型重复此操作
  • 注意:项目3..5是必需的,因为依赖类型无法自动重新编译或“就地”手动编译

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

    使用本文中的指导,其中讨论了三个相关场景


    在博客中,不要强行使用DROP,因为它会自动修改表(删除列),上帝知道还有什么可以验证一切。 使用类似于:

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

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

    您还应该查看表依赖项,因为它们也可以阻止您重新创建类型。请注意,此处可能存在两个问题:a)类型依赖项,或b)表依赖项。