首页 文章

user_DEPENDENCIES如何从程序中读取

提问于
浏览
0

如果我运行此查询:

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 回答

  • 1

    每次创建,删除或修改对象时,Oracle都会自动记录依赖项更改 . 此信息存储在“数据字典”视图中 . 你可以在这里找到更多信息:Schema Object Dependencies

    那就是回答你的问题, USER_DEPENDENCIES 在每次更改程序时都不会更新't read, but it' . 当您删除表,将其发送到bin时,缺少依赖项(并且您可以重新创建表) .

    所以 USER_DEPENDENCIES 是一个视图,它从数据库中读取而不是从您的过程中读取 . 回收站结果将保留在那里,直到您的过程保持无效(您可以使用表重新编译,或删除它来修复它) .

  • 1

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

    如果要在recyclebin中找到对象的原始名称,则可以

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

    这应该给你掉落的 RANDOM_TABLE_NAME .

    不过,我不确定这是你的问题 . 我不知道“从程序中读取而不是从数据库中读取”意味着什么 .

  • 1

    只是另一个尝试明确问题的含义:"procedure"是一个代码 . 代码是一种描述执行算法的方法,并没有存储任何东西,而是代码和一些在执行开始时初始化的常量 .
    因此,您的过程代码"read"(如果有的话)来自"database"(磁盘存储和缓存),而不是其他任何地方 .

    如果您对 user_dependencies 是什么有疑问,请回答"is a view":

    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表 .

相关问题