user_dependencies ビューでオブジェクトの依存関係を参照することができる。
select * From user_dependencies where Name = オブジェクト名
上記のビューを利用して指定したオブジェクトの依存関係を出力するスクリプトを
作成してみた。
ファンクションがネストしていたらその下層のオブジェクトも参照可能。
OracleReferenced.vbs
'-------------------------------------------------------------------------------------- ' ' Oracle 依存関係情報出力 ' ' (指定したオブジェクトに依存しているオブジェクトをツリー形式で出力する。) ' ' 動作確認環境 Oracle10g ' Windows XP Sp2 '-------------------------------------------------------------------------------------- targetObject = InputBox("参照情報を出力したいオブジェクトを指定してください","オブジェクトの指定","") if targetObject = "" then msgbox "処理を中止しました。" else '結果を出力するファイルを作成する Set fileSystem = CreateObject("Scripting.FileSystemObject") Set resultfile = fileSystem.CreateTextFile(targetObject & "_Referenced.txt",True) ' resultfile.WriteLine targetObject Call writeReferenced(resultfile,targetObject,0) msgbox "処理が完了しました。" end if '---------------------------------------------------------------- ' ' 指定したオブジェクトの依存関係を出力 ' '---------------------------------------------------------------- Sub writeReferenced (resultfile,objectname, deeps) '定数の定義 Const adOpenStatic = 3 Const adLockOptimistic = 3 Const adUseClient = 3 Set objConn = CreateObject("ADODB.Connection") Set objRec = CreateObject("ADODB.Recordset") 'DB接続情報の記述 objConn.Open "Provider=MSDAORA.1;Password=****;User ID=****;Data Source=****;Persist Security Info=True" objRec.CursorLocation = adUseClient 'RecordSetのOpen objRec.Open "SELECT * FROM USER_DEPENDENCIES WHERE NAME = '" & objectname & "'" , objConn, adOpenStatic, adLockOptimistic Do Until objRec.EOF 'オーナーがSYSのものは出力しない if objRec.Fields("REFERENCED_OWNER").value = "SYS" then '出力しない 'オーナーがPUBLICのものは出力しない elseif objRec.Fields("REFERENCED_OWNER").value = "PUBLIC" then '出力しない else 'ツリー形式のフォーマット formatval = space(deeps) & "|-" resultfile.WriteLine formatval & objRec.Fields("REFERENCED_NAME").value 'オブジェクトの種類がファンクションならばさらに下の階層へ if objRec.Fields("REFERENCED_TYPE").value = "FUNCTION" then Call writeReferenced(resultfile, objRec.Fields("REFERENCED_NAME").value, deeps + 1 ) end if end if objRec.MoveNext Loop objRec.Close objConn.Close end Sub