پروسیجر EXPAND_SQL_TEXT

یک ویو ممکن است از یک پرس و جوی بسیار پیچیده و با متن طولانی ایجاد شده باشد و حتی بعضا، در متن پرس و جو، به ویوهای پیچیده دیگری هم رجوع شده باشد با این شرایط، برای ارائه راه حلهای پرفورمنسی  و همچنین انجام تغییری در متن کد، داشتن متن کامل پرس و جو(بدون ارجاع به هیچ ویوی دیگر)، می تواند در مواردی راهگشا باشد.

در اوراکل 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”

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

Comment (1)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.