Oracle ALL_SYNONYMSビューを照会しようとしていますが、OWNER = PUBLICでフィルタリングすると、作成したシノニムとOracleが作成したシノニムの両方が返されます。 2つを区別する方法はありますか?
さて、あなたはオブジェクトの作成日までに行くことができます:
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