There are many different ways to get an explanation plan. This is not just an exhaustive list. I think there are important differences between the methods, and it's worth having each of them in your toolbox.
1 - Tracking procedure call.
, SQL PL/SQL. , PL/SQL SQL , .
, , , , . , , () .
2 - SQL
, :
SELECT VALUE(VD)
FROM
VW_DEPT VD WHERE EXISTS (SELECT 1 FROM TABLE(typ_emp_coll() ) VV WHERE VD.DEPTNO = VV.DEPTNO);
:
SELECT VALUE(VD)
FROM
VW_DEPT VD WHERE EXISTS (SELECT 1 FROM TABLE(typ_emp_coll(typ_emp(null,null,null,null,null,null,null,null)) ) VV WHERE VD.DEPTNO = VV.DEPTNO);
SQL. . , , , . Oracle .
3 - SQL_ID .
SQL_ID V$SQL. 1 , .
select * from v$sql where upper(sql_text) like '%SELECT 1 FROM TABLE(%';
sql_id , :
select * from table(dbms_xplan.display_cursor(sql_id => '7c02yjs9q5kqr'));
SQL_ID 7c02yjs9q5kqr, child number 0
SELECT VALUE(VD) FROM VW_DEPT VD WHERE EXISTS (SELECT 1 FROM TABLE(:B1
) VV WHERE VD.DEPTNO = VV.DEPTNO)
Plan hash value: 2616009478
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | | | 32 (100)| |
|* 1 | HASH JOIN SEMI | | 1 | 32 | 32 (4)| 00:00:01 |
| 2 | TABLE ACCESS FULL | DEPT | 1 | 30 | 2 (0)| 00:00:01 |
| 3 | COLLECTION ITERATOR PICKLER FETCH| | 8168 | 16336 | 29 (0)| 00:00:01 |
Predicate Information (identified by operation id):
1 - access("DEPTNO"=SYS_OP_ATG(VALUE(KOKBF$),8,9,2))
: /*+ gather_plan_statistics */, v$sql_monitor, v$sql_plan, dbms_sqltune.report_sql_monitor(sql_id => '7c02yjs9q5kqr', type => 'active') .. . report_sql_monitor, . ,
.
4 - .
create or replace package test_pkg is
v_emp typ_emp_coll;
function get_v_emp return typ_emp_coll;
end;
/
create or replace package body test_pkg is
function get_v_emp return typ_emp_coll is
begin
return v_emp;
end;
end;
/
SQL . :
select * from table(test_pkg.get_v_emp);
?
, , , , . , , 8168 .
, , , , .
, :
select * from table(test_pkg.get_v_emp)