USER_DEPENDENCIES (依存関係の表示)


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