0
我需要嗅出一个Oracle包的SQL执行计划。如何从使用SQL * Plus参数运行的Oracle包中获取Sql执行计划?
SQL * Plus的代码来运行这个包看起来是这样的:
VARIABLE RC REFCURSOR
EXEC :RC :=PACKAGENAME.GETREPORTDATA('12_300',1999,2014,'246246',NULL)
PRINT RC
我一直在使用SQL做* Plus的,因为它是一个詹金斯工作的一部分,我需要保存输出到一个文件,以进一步比较的目的。
我已经被告知要做到这一点的方法,它看起来像这样:
select
sqlplan.operation,
sqlplan.options,
sqlplan.object_name,
sqlplan.cost,
sqlplan.depth
from v$sqlarea sqlarea,
v$session sesion,
v$sql_plan sqlplan
where sesion.sql_hash_value = sqlarea.hash_value
and sesion.sql_address = sqlarea.address
and sqlarea.plan_hash_value = sqlplan.plan_hash_value
and sesion.username = 'USERNAME' order by sqlplan.depth;
但所有我从这个代码得到的是
v$sql_plan sqlplan
*
ERROR at line 9:
ORA-00942: table or view does not exist
我发现了另一件事是EXPLAIN PLAN
命令,但它不适合我,或者我错误地使用它。
说实话,我只是不知道从哪里开始的这...
任何信息都受我:)
你有没有试过把系统。在意见面前? – 2014-12-04 09:05:10
或者您可以跟踪会话并使用tkprof获取每个语句的计划 – ninesided 2014-12-04 09:24:24
另一种方法是检查通过v $ session获取执行语句的sql_id然后使用dbms_xplan.display_cursor()获取存储的执行计划。 – 2014-12-04 10:53:27