É possível examinar o plano de execução de uma instrução SQL executada dentro de um bloco PLSQL?
DECLARE
l_count PLS_INTEGER;
BEGIN
SELECT COUNT(1) INTO l_count
FROM foo;
END;
/
Para SQL regular, eu normalmente executaria o seguinte para verificar o plano de execução:
select * from table(dbms_xplan.display_cursor(null, null, 'ALLSTATS LAST'));
No entanto, isso apenas relata:
NOTE: cannot fetch plan for SQL_ID: 3q0sujncq54wy, CHILD_NUMBER: 0
Please verify value of SQL_ID and CHILD_NUMBER;
It could also be that the plan is no longer in cursor cache (check v$sql_plan)
Você pode procurar o
sql_id
Andchild_number
inv$sql
. Algo como:Observe que o pl/sql normaliza o SQL estático para você aumentar o compartilhamento do cursor - ele estará em letras maiúsculas com muito menos espaço em branco.
Uma vez que você tenha isso, você pode simplesmente inserir na
dbms_xplan.display_cursor
função