web-dev-qa-db-ja.com

ユーザー定義のパブリックシノニムと組み込みのパブリックシノニムを区別するにはどうすればよいですか?

Oracle ALL_SYNONYMSビューを照会しようとしていますが、OWNER = PUBLICでフィルタリングすると、作成したシノニムとOracleが作成したシノニムの両方が返されます。 2つを区別する方法はありますか?

1
Nathan Voxland

さて、あなたはオブジェクトの作成日までに行くことができます:

SELECT AO.*
  FROM ALL_OBJECTS AO
  INNER JOIN ALL_SYNONYMS ASY ON AO.OWNER = ASY.OWNER and AO.OBJECT_NAME = ASY.SYNONYM_NAME
  AND ASY.OWNER = 'PUBLIC'
  ORDER by AO.CREATED DESC

システムで作成されたシノニムはすべて同じ作成日である必要があります。これは、データベースの作成時刻とこのリストの最も早いものに等しくなります。

これを使用して、シノニムによって参照されているシステム所有のオブジェクトを除外することもできます。

SELECT AO.*
  FROM ALL_OBJECTS AO
  INNER JOIN ALL_SYNONYMS ASY ON AO.OWNER = ASY.OWNER and AO.OBJECT_NAME = ASY.SYNONYM_NAME
  AND ASY.OWNER = 'PUBLIC'
  AND ASY.TABLE_OWNER NOT IN ('CTXSYS','EXFSYS','APPQOSSYS','XDB','SYS', 'DVSYS', 'FLOWS_FILES', 'LBACSYS', 'MDSYS', 'OLAPSYS', 'ORDSYS', 'ORDDATA','WMSYS','SYSTEM', 'DBMS_PRIVILEGE_CAPTURE') 
  and ASY.TABLE_OWNER not like 'APEX_%'
  ORDER by AO.CREATED DESC
1
druzin