LoginSignup
0
1

More than 5 years have passed since last update.

Oracle 各スキーマがアクセスできるプロシージャ、パッケージ、ファンクション、トリガーなどの依存性リスト取得

Last updated at Posted at 2018-02-14
list_dependencies.sql
--
-- 各スキーマがアクセスできるプロシージャ、パッケージ、ファンクション、トリガーなどの依存性リスト取得
--
-- 当然のことだが、OracleにSTOREされないSQL単体やPL/SQLの無名ブロックはこのリストには載らない。
--
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING ON
SET LINESIZE 250
SET PAGESIZE 50000
SET TAB OFF
SET TERMOUT OFF
SET TRIMSPOOL ON
-- SPOOL pass includes CONNECT_IDENTIFIER, USER_NAME and SYSDATE
COLUMN USER_NAME    NEW_VALUE USER_NAME
COLUMN SYSTEM_DATE  NEW_VALUE SYSTEM_DATE
SELECT USER || '_' AS USER_NAME
     , TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') AS SYSTEM_DATE
FROM DUAL ;
SPOOL list_dependencies_&&_CONNECT_IDENTIFIER._&&USER_NAME&&SYSTEM_DATE..log
-- Windows ↑,  UNIX/Linux では ↓ を有効に
-- SPOOL list_dependencies_\&&_CONNECT_IDENTIFIER._\&&USER_NAME\&&SYSTEM_DATE..log
BREAK ON NAME ON TYPE
COLUMN NAME                  FORMAT A30
COLUMN TYPE                  FORMAT A17
COLUMN REFERENCED_NAME       FORMAT A45 HEADING "REFERENCED OWNER.NAME"
COLUMN REFERENCED_TYPE       FORMAT A12
COLUMN REFERENCED_LINK_NAME  FORMAT A15
COLUMN DEPENDENCY_TYPE       FORMAT A10
SELECT
    DP.NAME                                -- オブジェクトの名前
  , DP.TYPE                                -- オブジェクトのタイプ
  , DECODE(MO.STATUS, 'VALID', NULL, MO.STATUS) AS STATUS
  , MO.LAST_DDL_TIME                                                 -- 最後に更新された日次
  , NVL2(DP.REFERENCED_LINK_NAME, DP.REFERENCED_OWNER                -- 参照されるオブジェクトの所有者(リモート・オブジェクトの場合はリモートの所有者).
                                  || '.' || DP.REFERENCED_NAME       -- 参照されるオブジェクトの名前
                                  || '@' || DP.REFERENCED_LINK_NAME  -- 親オブジェクトへのリンク名(リモートの場合)
  , DP.REFERENCED_OWNER || '.' || DP.REFERENCED_NAME) AS REFERENCED_NAME
  , DP.REFERENCED_TYPE                     -- 参照されるオブジェクトの型
  , DECODE(RO.STATUS, 'VALID', NULL, RO.STATUS) AS R_STATUS
  , DECODE(DP.DEPENDENCY_TYPE, 'HARD', NULL, DP.DEPENDENCY_TYPE) AS DEPENDENCY_TYPE  -- 依存性がREF依存性であるか(REF)、そうでないか(HARD)
FROM USER_DEPENDENCIES DP
LEFT OUTER JOIN USER_OBJECTS MO  -- MY OBJECT
ON  MO.OBJECT_TYPE = DP.TYPE
AND MO.OBJECT_NAME = DP.NAME
LEFT OUTER JOIN USER_OBJECTS RO  -- REFERENCED OBJECT
ON  RO.OBJECT_TYPE = DP.REFERENCED_TYPE
AND RO.OBJECT_NAME = DP.REFERENCED_NAME
WHERE
    RO.OBJECT_NAME NOT LIKE 'BIN$%' -- except trash box, since Oracle10.1.0
ORDER BY 
    DP.NAME
  , DP.TYPE
  , DP.REFERENCED_OWNER
  , DP.REFERENCED_NAME
  , DP.REFERENCED_TYPE
  , DP.REFERENCED_LINK_NAME ;
SPOOL OFF
-- SYS.STANDARD は Oracle社が提供している標準関数(SQL language referenceに載っている関数)を1つ以上使っていると当リストに載る
CLEAR BREAK
COLUMN NAME                  CLEAR
COLUMN TYPE                  CLEAR
COLUMN REFERENCED_NAME       CLEAR
COLUMN REFERENCED_TYPE       CLEAR
COLUMN REFERENCED_LINK_NAME  CLEAR
COLUMN DEPENDENCY_TYPE       CLEAR
SET ECHO ON
SET FEEDBACK ON
SET HEADING ON
SET LINESIZE 80
SET TERMOUT OFF
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1