2012-01-27 75 views
0

這是一個Oracle問題。確定存儲過程是否存在於任何地方?

我需要編寫一個給定名稱的pl/sql函數,並確定它是否與任何可調用的存儲過程相對應。也就是說,名稱可以是以下任何形式:

somename - 可能是當前模式中的過程或其他位置的同義詞 firstpart.secondpart - 可能表示包firstpart(位於當前模式或同義詞)與二部PROC它也可能意味着用戶firstpart和程序二部 first.second.third - 大概意味着用戶第一,第二包,第三程序

(我認爲這些都是做好一切準備)

。我可以一個接一個地查看每種可能性,尋找all_synonyms和all_procedures,但是有沒有更好的方法讓我們甲骨文完成了大部分工作?即試圖調用該過程並捕獲異常(如果它不存在)?不幸的是,我注意到當我嘗試一個不存在的過程的名字(在一個包中)時,我調用一個過程(通過EXECUTE IMMEDIATE中的begin; end塊)返回相同的錯誤-6550,就像我用錯誤的參數嘗試了一個有效的過程。

對此提出建議?

回答

0

我不會建議嘗試調用該過程,因爲如果調用成功,過程的所有副作用都會發生。更好的恕我直言,查詢元數據。

分享和享受。

+0

在編寫了一個嘗試許多可能性並意識到我永遠無法找到它們的程序之後,我意識到如果我知道該過程應該有什麼參數,那麼我只能使用dbms_sql.parse來開始/ end塊調用過程,如果它不是一個有效的過程調用,dbms_sql.parse將拋出一個異常,我可以捕獲它。儘管如此,我將不得不小心避免sql注入問題。 – user1173713 2012-01-27 22:29:18