إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

عملية Wrapping


3 رد (ردود) على هذا الموضوع

#1 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

تاريخ المشاركة 15 April 2007 - 10:53 AM

تغطية مولد pl/sql الدينامكي وهي ما تعرف بـ (WRAP dynamically generated PL/SQL)

هذا الموضوع موجود في المنتدى لاكن هنا أخر التطورات في 10g

قد تلاحظ حينما تريد الاستعلام عن النص المكون لبعض procedures, packages ,functions من خلال العرض USER_SOURCE أنه في بعض الحالات مشفر ولا يمكن معرفة ما يحتويه النص هذا هو الموضوع الذي سنتكلم عنه ..................................
مثال لكي يكون الموضوع أشد وضوحا:
قم بالاتصال بالمستخدم SYSTEM ثم نفذ التالي

SELECT TEXT FROM USER_SOURCE 
 WHERE NAME LIKE 'DBMS_REPCAT_AUTH';


بعد تنفيذك الكود تابع >>>>>>>>>>>>>>>>>>>>>>>>>>>

هذه package تم تغطية محتواها من قبل الاوراكل حتى لا يتم كشف ما تحتويه .

عموما في الإصدار (Oracle 10g Release 2) تم إضافة
(An overloaded function and procedure) إلى الحزمة DBMS_DDL

Function(wrap:
وهي الوظيفة المزيدة التحميل تسترجع مصدر كودpl/sql المغطى حينما تزود بالمصدر الأصلي .

Procedure(create_wrapped :
وهو الإجراء الذي يغطي النص الأصلي مستخدمه كمدخل وهو اسرع من استخدام wrap.

طريقة عمل كلا من :
wrap
نستخدم هذه الوظيفة مع (Execute immediate) لإنشاء الكود المغطى هذا المثال يوضح

DECLARE
 v_procedure VARCHAR2(32767);
 BEGIN
 v_procedure := 'CREATE OR REPLACE PROCEDURE get_empl '
 ||'IS '
 ||' '
 ||' cursor  C1 is'
 ||' select ename,sal'
 ||' from emp;'
 ||' '
 ||'BEGIN '
 ||' for i in C1 loop'
 ||' dbms_output.put_line(i.ename);'
||' dbms_output.put_line(i.sal);'
||' END LOOP;'
|| 'END;';
[color=#FF0000]EXECUTE IMMEDIATE DBMS_DDL.WRAP(v_procedure);[/color]
END;


بعد ذلك نفذ هذا الكود
select text from user_source 
where name=upper('get_empl');


Create_wrapped

DBMS_DDL.CREATE_WRAPPED يعمل بنفس الطريقة لاكن اختلاف بسيط

DECLARE
 v_procedure VARCHAR2(32767);
 BEGIN
 v_procedure := 'CREATE OR REPLACE PROCEDURE get_empl '
 ||'IS '
 ||' '
 ||' cursor  C1 is'
 ||' select ename,sal'
 ||' from emp;'
 ||' '
 ||'BEGIN '
 ||' for i in C1 loop'
 ||' dbms_output.put_line(i.ename);'
||' dbms_output.put_line(i.sal);'
||' END LOOP;'
|| 'END;';
[color=#FF0000]SYS.DBMS_DDL.CREATE_WRAPPED(v_procedure);[/color]
END;



لايوجد سوى اختلاف بسيط حيث هنا لادعي لاستعمال EXECUTE IMMEDIATE

وتحياتي لكـــــــــــــــــــم

#2 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

تاريخ المشاركة 15 April 2007 - 12:42 PM

اتمنى الأستفادة من المعلومات الجديدة ياشباب

#3 عبداللطيف

عبداللطيف

    مــشــرف عــام

  • الإشراف العام
  • 1,267 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 16 April 2007 - 02:00 AM

الف شكر اخي الكريم

#4 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

تاريخ المشاركة 16 April 2007 - 11:32 PM

شكر ا للأهتمام اخي عبد اللطيف