如何使用SELECT DELETE INSERT UPDATE操作获取表的名称

时间:2010-09-24 05:05:27

标签: oracle

我想要一个工具或解决方案来查找运行过程的受影响的表|函数或包给定PL / SQL代码。

这需要我通过运行代码知道哪些表会受到影响以及对它们执行的所有操作来获得更好的测试用例。

解决方案甚至应该适用于过程调用过程。

OutPut可能是:

SELECT FROM:TABLE1

DELETE FROM:TABLE2

INSERT INTO:TABLE3

CALL AnotherPROC:

SELECT FROM:TABLE4

DELETE FROM:TABLE5

提前致谢:

3 个答案:

答案 0 :(得分:2)

对于预运行分析,如果您正在运行存储过程/包/函数,那么DBA_DEPENDENCIES表可以告诉您哪些对象“依赖”它,但这并不意味着它们可能一定会受到影响,因为程序控制可以采取不同的方向。

运行后分析,您可以使用审核或跟踪来查看哪些表受到影响。

答案 1 :(得分: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。我确信有工具可以做到这一点,但我对它们没有经验。

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

答案 2 :(得分:-1)

在MySql中,您可以通过在查询开头添加关键字EXPLAIN来获取有关受影响的表的信息。它将为您提供列为列的不同信息。检查Oracle中是否有这样的功能可能对您的方案有所帮助。