DBMS_UTILITY.EXPAND_SQL_TEXT : Expand SQL References to Views in Oracle Database 12c Release 1 (12.1)
Views can be a useful way to hide complexity from developers, but that can in turn cause problems. It's easy to write apparently simple statements, that result in extremely complex SQL being sent to the server. TheDBMS_UTILITY.EXPAND_SQL_TEXT procedure expands references to views, turning them into subqueries in the original statement. A simple example of this is shown below.Create a view containing a join.
CONN scott/tiger@pdb1
CREATE OR REPLACE VIEW emp_v AS
SELECT e.empno,
e.ename,
e.job,
e.mgr,
e.hiredate,
e.sal,
e.comm,
e.deptno,
d.dname
FROM emp e
JOIN dept d ON e.deptno = d.deptno;
The view has hidden the complexity of the join, allowing us to use an extremely simple query.SELECT * FROM emp_v;We can see the real SQL statement processed by the server by expanding the statement.
SET SERVEROUTPUT ON
DECLARE
l_clob CLOB;
BEGIN
DBMS_UTILITY.expand_sql_text (
input_sql_text => 'SELECT * FROM emp_v',
output_sql_text => l_clob
);
DBMS_OUTPUT.put_line(l_clob);
END;
/
SELECT "A1"."EMPNO" "EMPNO",
"A1"."ENAME" "ENAME",
"A1"."JOB" "JOB","A1"."MGR" "MGR",
"A1"."HIREDATE" "HIREDATE",
"A1"."SAL" "SAL",
"A1"."COMM" "COMM",
"A1"."DEPTNO" "DEPTNO",
"A1"."DNAME" "DNAME"
FROM (SELECT "A2"."EMPNO_0" "EMPNO",
"A2"."ENAME_1" "ENAME",
"A2"."JOB_2" "JOB",
"A2"."MGR_3" "MGR",
"A2"."HIREDATE_4" "HIREDATE",
"A2"."SAL_5" "SAL",
"A2"."COMM_6" COMM",
"A2"."QCSJ_C000000000400000_7" "DEPTNO",
"A2"."DNAME_9" "DNAME"
FROM (SELECT "A4"."EMPNO" "EMPNO_0",
"A4"."ENAME" "ENAME_1",
"A4"."JOB" "JOB_2",
"A4"."MGR" "MGR_3",
"A4"."HIREDATE" "HIREDATE_4",
"A4"."SAL" "SAL_5",
"A4"."COMM" "COMM_6",
"A4"."DEPTNO" "QCSJ_C000000000400000_7",
"A3"."DEPTNO" "QCSJ_C000000000400001",
"A3"."DNAME" "DNAME_9"
FROM SCOTT."EMP" "A4",
SCOTT."DEPT" "A3"
WHERE "A4"."DEPTNO"="A3"."DEPTNO") "A2"
) "A1"
PL/SQL procedure successfully completed.
SQL>

No hay comentarios:
Publicar un comentario