یک ویو ممکن است از یک پرس و جوی بسیار پیچیده و با متن طولانی ایجاد شده باشد و حتی بعضا، در متن پرس و جو، به ویوهای پیچیده دیگری هم رجوع شده باشد با این شرایط، برای ارائه راه حلهای پرفورمنسی و همچنین انجام تغییری در متن کد، داشتن متن کامل پرس و جو(بدون ارجاع به هیچ ویوی دیگر)، می تواند در مواردی راهگشا باشد.
در اوراکل 12c، برای استخراج متن کامل یک ویو می توانیم پروسیجری از بسته DBMS_UTILITY که EXPAND_SQL_TEXT نام دارد را صدا بزنیم. این پروسیجر، با دریافت متن پرس و جو به عنوان ورودی، متن کامل و همراه با جداول مرجع را برمی گرداند.
در مثال زیر، متن کامل پرس وجوی مربوط به ویوی v$session را با کمک پروسیجر DBMS_UTILITY.expand_sql_text استخراج خواهیم کرد:
SET SERVEROUTPUT ON
DECLARE
l_clob CLOB;
BEGIN
DBMS_UTILITY.expand_sql_text (
input_sql_text => ‘select sid from v$session’,
output_sql_text => l_clob );
DBMS_OUTPUT.put_line(l_clob);
END;
متن کامل به شکل زیر خواهد بود:
SELECT “A1″.”SID” “SID” FROM (SELECT “A2″.”SID” “SID” FROM (SELECT “A3″.”SID” “SID” FROM (SELECT “A6″.”INST_ID” “INST_ID”,”A6″.”INDX” “SID” FROM “SYS”.”X$KSUSE” “A6″,”SYS”.”X$KSLED” “A5″,”SYS”.”X$KSLWT” “A4” WHERE BITAND(“A6″.”KSSPAFLG”,1)<>0 AND BITAND(“A6″.”KSUSEFLG”,1)<>0 AND “A6″.”INDX”=”A4″.”KSLWTSID” AND “A4″.”KSLWTEVT”=”A5″.”INDX”) “A3” WHERE “A3”.”INST_ID”=USERENV(‘INSTANCE’)) “A2”) “A1”
Comment (1)