如果我运行此查询:
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的结果消失了吗?
答案 0 :(得分:1)
我不确定我是否理解这个问题。
如果要在recyclebin中找到对象的原始名称,可以
SELECT original_name
FROM user_recyclebin
WHERE object_name = 'BIN$6WfJh8MWWGngQ3ATqMDOpQ==$0'
这应该会给你掉落的RANDOM_TABLE_NAME
。
答案 1 :(得分:1)
每次创建,删除或修改对象时,Oracle都会自动记录依赖项更改。此信息存储在“数据字典”视图中。您可以在此处找到更多信息:Schema Object Dependencies
那说回答你的问题,USER_DEPENDENCIES
没有阅读,但每次更改程序时都会更新。删除表时,将其发送到bin,缺少依赖项(如果不重新创建表,则无法编译它)。
所以USER_DEPENDENCIES
是一个视图,它从数据库中读取而不是从您的过程中读取。回收站结果将保留在那里,直到您的过程保持无效(您可以使用表重新编译,或删除它以修复它)。
答案 2 :(得分:1)
只是另一个尝试明确问题的含义:“程序”是一个代码。代码是一种描述执行算法的方法,并没有存储任何东西,而是代码和一些在执行开始时初始化的常量。
因此,您的过程代码“读取”(如果有)的任何内容都来自“数据库”(磁盘存储和缓存),而不是其他任何地方。
如果您对user_dependencies
的内容有疑问,请回答“是一个观点”:
create or replace view sys.user_dependencies
(name, type, referenced_owner, referenced_name, referenced_type, referenced_link_name, schemaid, dependency_type)
as
select o.name,
-- ... skipped code ...
from
sys."_CURRENT_EDITION_OBJ" o,
sys.disk_and_fixed_objects po,
sys.dependency$ d, sys.user$ pu
where
-- ... another skipped code ...
sys._current_edition_obj
是另一种观点:
create or replace view sys._current_edition_obj as
select
-- ... skipped ...
from obj$ o, user$ u
where
-- .. skipped ...
sys.obj $和sys.user $是内部Oracle表。