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

عملية Wrapping


sky information

Recommended Posts

تغطية مولد 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

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

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية