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