2010-09-24 47 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。我确信有工具可以做到这一点,但我没有经验。

您可以随时编写自己的自定义日志记录,但这是一项大量的工作。最好的解决方案可能是要求开发人员充分记录每个功能,并列出其所有代码的目的,输入,输出和副作用。

相关问题