all_identifiers table 中未出现同义词

Synonym not appearing in all_identifiers table

美好的一天,

我遇到了一个奇怪的问题,PLSQL 包的 public 同义词没有出现在 all_identifiers table.

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

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

  1. all_identifierstable什么时候更新?我会假设 object/synonym 编译。

  2. 我可以强制 table 更新吗?

感谢您的帮助。

长话短说:

alter session set plscope_settings='IDENTIFIERS:ALL';

继续阅读 Using PL/Scope


Demo: 什么都没有(在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>

哒哒哒!