2010-09-24 115 views
0

我想要一個工具或解決方案來查找運行過程中受影響的表|函數或包給定PL/SQL代碼。如何使用SELECT DELETE INSERT UPDATE操作獲取表名稱

對於我來說,通過運行代碼以及對它們執行的所有操作知道哪些表將受到影響,從而獲得更好的測試用例。

解決方案應該甚至適用於過程調用過程。

輸出可能是:

SELECT FROM:TABLE1

DELETE FROM:TABLE2

INSERT INTO:表3

CALL AnotherPROC:

SELECT FROM:表4

DELETE FROM:TABLE5

在此先感謝:

回答

-1

在MySQL中,你可以得到正在受到添加關鍵字查詢的開始解釋表的信息。它會給你列出不同的信息列。檢查在Oracle中是否有這樣的功能可能有助於您的方案。

2

對於預運行分析,如果您正在運行存儲過程/程序包/函數,則DBA_DEPENDENCIES表可以告訴您哪些對象「依賴」它,但這並不意味着它們可能一定會受到影響,因爲程序控制可以採取不同的方向。

運行後分析可以使用AUDITing或tracing來查看哪些表受到影響。

+0

依賴關係是一個很好的。我只是在考慮跟蹤。然而,依賴關係有利於覆蓋所有可能的影響,這可能是從測試角度所需要的!但是遞歸問題很棘手:( – 2010-09-24 06:37:05

+0

動態SQL在DBA_DEPENDENCIES中未被跟蹤。兩種解決方案都需要用於代碼覆蓋。 – 2010-09-24 13:59:10

0

您可以通過幾種不同的方式獲得部分或全部信息,但我想不出任何方法能夠以您指定的確切格式提供信息。

跟蹤

跟蹤文件可以記錄一切,而這一切都存儲在旨在供人閱讀的文本文件。有很多的例子對如何做到這一點,這裏有一個只爲我工作:http://tonguc.wordpress.com/2006/12/30/introduction-to-oracle-trace-utulity-and-understanding-the-fundamental-performance-equation/

剖析

您可以使用DBMS_PROFILER記錄哪些行號是由程序調用。然後,您必須將行號加入DBA_SOURCE以獲取實際的命令。

V $ SQL

此記錄執行的SQL語句。您可以通過PARSING_SCHEMA_NAME搜索SQL,並按LAST_UPDATE_TIME排序。但是這不會得到PL/SQL,並且V $ SQL可能很難使用。 (SQL可能會老化,或者可能被其他人加載等)

但是爲了得到您想要的,所有這些解決方案都要求您編寫一個程序來解析SQL和PL/SQL。我確信有工具可以做到這一點,但我沒有經驗。

您可以隨時編寫自己的自定義日誌記錄,但這是一項大量的工作。最好的解決方案可能是要求開發人員充分記錄每個功能,並列出其所有代碼的目的,輸入,輸出和副作用。

相關問題