0

如果我运行此查询:

SELECT DISTINCT U.REFERENCED_NAME, U.REFERENCED_TYPE
FROM USER_DEPENDENCIES U
where U.name IN('P_CREATE_T')

它会给我:

  U.REFERENCED_NAME |  U.REFERENCED_TYPE
  random_name_table | table

如果我删除此表 random_name_table :

删除表 random_name_table

我运行dependecie查询它会给我这个:

        U.REFERENCED_NAME        |  U.REFERENCED_TYPE
  BIN$6WfJh8MWWGngQ3ATqMDOpQ==$0 | table

我知道结果与回收站有关,但我要问的是有没有一种方法可以显示表格,即使它被丢弃了?我的意思是不应该从过程中读取依赖查询而不是从数据库中读取?如果没有,是否有从过程读取而不是从数据库读取的查询?


编辑
好,我会说清楚:
我的问题 USER_DEPENDENCIES 是从程序还是数据库中读取?我的第二个问题是回收站总是显示吗?我的意思是有时recylebin的结果会消失吗?

4

3 回答 3

1

我不确定我是否理解这个问题。

如果要在回收站中查找对象的原始名称,可以

SELECT original_name
  FROM user_recyclebin
 WHERE object_name = 'BIN$6WfJh8MWWGngQ3ATqMDOpQ==$0'

那应该给你RANDOM_TABLE_NAME你放弃的那个。

不过,我不确定这是您的问题。我不知道“从过程中读取而不是从数据库中读取”是什么意思。

于 2013-10-31T15:46:41.283 回答
1

每次创建、删除或修改对象时,Oracle 都会自动记录依赖关系的变化。此信息存储在数据字典视图中。您可以在此处找到更多信息:Schema Object Dependencies

就是说要回答您的问题,USER_DEPENDENCIES没有阅读,但每次您更改程序时都会更新。当您删除表并将其发送到 bin 时,缺少依赖项(如果不重新创建表,则无法编译它)。

视图也是如此USER_DEPENDENCIES,它是从数据库中读取的,而不是从您的程序中读取的。回收站结果将保留在那里,直到您的过程保持无效(您可以重新编译、使用表或删除它以修复该问题)。

于 2013-10-31T16:25:11.063 回答
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 表。

于 2013-10-31T18:55:37.650 回答