首页 > 解决方案 > all_identifiers 表中未出现同义词

问题描述

再会,

我遇到了一个奇怪的问题,即 PLSQL 包的公共同义词没有出现在 all_identifiers 表中。

我编译了包头和包体,为它创建了公共同义词。

如果我检查 all_objects 表,我可以看到包的包对象和包的同义词对象。但是如果我检查 all_identifiers 表,它没有条目。

  1. all_identifiers 表何时更新?我会假设对象/同义词编译。

  2. 我可以强制表格更新吗?

感谢您提供任何帮助。

标签: oracleoracle11g

解决方案


长话短说:

alter session set plscope_settings='IDENTIFIERS:ALL';

阅读使用 PL/Scope


演示:那里什么都没有(在 中ALL_IDENTIFIERS,即):

SQL> create or replace package pkg_test as
  2    procedure p_test;
  3  end;
  4  /

Package created.

SQL> create or replace package body pkg_test as
  2    procedure p_test is begin null; end;
  3  end;
  4  /

Package body created.

SQL> create public synonym syn_pkg_test for pkg_test;

Synonym created.

SQL> select owner, name, type from all_identifiers where name like 'SYN%TEST';

no rows selected

SQL>

让我们重新开始,但这次首先更改会话:

SQL> drop public synonym syn_pkg_test;

Synonym dropped.

SQL> alter session set plscope_settings='IDENTIFIERS:ALL';

Session altered.

SQL> create or replace package pkg_test as
  2    procedure p_test;
  3  end;
  4  /

Package created.

SQL> create or replace package body pkg_test as
  2    procedure p_test is begin null; end;
  3  end;
  4  /

Package body created.

SQL> create public synonym syn_pkg_test for pkg_test;

Synonym created.

SQL> select owner, name, type from all_identifiers where name like 'SYN%TEST';

OWNER                          NAME                           TYPE
------------------------------ ------------------------------ ------------------
PUBLIC                         SYN_PKG_TEST                   SYNONYM
PUBLIC                         SYN_PKG_TEST                   SYNONYM

SQL>

呸呸呸!


推荐阅读