如果我运行此查询:
SELECT DISTINCT U.REFERENCED_NAME,U.REFERENCED_TYPE来自USER_DEPENDENCIES U,其中U.name IN('P_CREATE_T')
它会给我:
U.REFERENCED_NAME | U.REFERENCED_TYPE
random_name_table | table
如果我删除此表random_name_table:
drop table random_name_table
我运行dependecie查询它会给我这个:
U.REFERENCED_NAME | U.REFERENCED_TYPE
BIN$6WfJh8MWWGngQ3ATqMDOpQ==$0 | table
我知道结果与回收站有关,但我要问的是有一种方法可以显示表,即使它已经下垂了吗?我的意思是不应该从过程读取依赖性查询而不是从数据库中读取?如果没有,那么从程序中读取而不是从数据库读取的查询?
编辑
好的,我会说清楚:
我的问题USER_DEPENDENCIES从程序或数据库中读取?我的第二个问题是回收站总是显示出来吗?我的意思是有时候recylebin的结果消失了吗?
3 回答
每次创建,删除或修改对象时,Oracle都会自动记录依赖项更改 . 此信息存储在“数据字典”视图中 . 你可以在这里找到更多信息:Schema Object Dependencies
那就是回答你的问题,
USER_DEPENDENCIES
在每次更改程序时都不会更新't read, but it' . 当您删除表,将其发送到bin时,缺少依赖项(并且您可以重新创建表) .所以
USER_DEPENDENCIES
是一个视图,它从数据库中读取而不是从您的过程中读取 . 回收站结果将保留在那里,直到您的过程保持无效(您可以使用表重新编译,或删除它来修复它) .我不确定我是否理解这个问题 .
如果要在recyclebin中找到对象的原始名称,则可以
这应该给你掉落的
RANDOM_TABLE_NAME
.不过,我不确定这是你的问题 . 我不知道“从程序中读取而不是从数据库中读取”意味着什么 .
只是另一个尝试明确问题的含义:"procedure"是一个代码 . 代码是一种描述执行算法的方法,并没有存储任何东西,而是代码和一些在执行开始时初始化的常量 .
因此,您的过程代码"read"(如果有的话)来自"database"(磁盘存储和缓存),而不是其他任何地方 .
如果您对
user_dependencies
是什么有疑问,请回答"is a view":sys._current_edition_obj
是另一种观点:sys.obj $和sys.user $是内部Oracle表 .