可以通過(guò)以下方法查看 oracle 存儲(chǔ)過(guò)程執(zhí)行狀態(tài):使用 dbms_application_info 包查看當(dāng)前正在執(zhí)行的操作。使用 v$session_longops 視圖查看正在執(zhí)行的存儲(chǔ)過(guò)程詳細(xì)信息。使用 v$sql_execute 視圖查看指定存儲(chǔ)過(guò)程相關(guān)的執(zhí)行信息。
如何查看 Oracle 存儲(chǔ)過(guò)程執(zhí)行到哪個(gè)位置
在 Oracle 數(shù)據(jù)庫(kù)中,可以通過(guò)以下方法查看存儲(chǔ)過(guò)程執(zhí)行到哪個(gè)位置:
使用 DBMS_APPLICATION_INFO 包
<code class="sql">SELECT action FROM DBMS_APPLICATION_INFO;</code>
登錄后復(fù)制
結(jié)果將顯示當(dāng)前正在執(zhí)行的操作,例如:
BEGIN – 存儲(chǔ)過(guò)程開(kāi)始執(zhí)行
END – 存儲(chǔ)過(guò)程執(zhí)行結(jié)束
EXECUTE STATEMENT – 正在執(zhí)行語(yǔ)句
COMMIT – 正在提交事務(wù)
使用 V$SESSION_LONGOPS 視圖
<code class="sql">SELECT sid, event, p1text, rows_processed, elapsed_seconds FROM V$SESSION_LONGOPS WHERE event LIKE '%EXECUTE PL/SQL%' AND sid = ;</code>
登錄后復(fù)制
結(jié)果將顯示當(dāng)前正在執(zhí)行的存儲(chǔ)過(guò)程的詳細(xì)信息,包括:
sid – 會(huì)話 ID
event – 事件類(lèi)型
p1text – 正在執(zhí)行的語(yǔ)句
rows_processed – 已處理的行數(shù)
elapsed_seconds – 已執(zhí)行的時(shí)間(以秒為單位)
使用 V$SQL_EXECUTE 視圖
<code class="sql">SELECT sql_text, row_count, elapsed_time FROM V$SQL_EXECUTE WHERE sql_text LIKE '%%' AND sid = ;</code>
登錄后復(fù)制
結(jié)果將顯示與指定存儲(chǔ)過(guò)程相關(guān)的執(zhí)行信息,包括:
sql_text – 存儲(chǔ)過(guò)程的 SQL 文本
row_count – 受影響的行數(shù)
elapsed_time – 已執(zhí)行的時(shí)間(以微秒為單位)
示例
假設(shè)有一個(gè)名為 “GET_EMPLOYEES” 的存儲(chǔ)過(guò)程。要查看其執(zhí)行狀態(tài),可以使用以下查詢:
<code class="sql">SELECT sid, event, p1text FROM V$SESSION_LONGOPS WHERE event LIKE '%EXECUTE PL/SQL%' AND p1text LIKE 'GET_EMPLOYEES%';</code>
登錄后復(fù)制
結(jié)果將顯示以下信息:
<code>sid event p1text 123 EXECUTE PL/SQL GET_EMPLOYEES(...)</code>
登錄后復(fù)制
這表明存儲(chǔ)過(guò)程 “GET_EMPLOYEES” 正在執(zhí)行,并且會(huì)話 ID 為 123。