(12-8) إنشاء و تعديل كائنات PL/SQL داخل قاعدة البيانات

الـ JDeveloper يتيح لك إنشاء ، تحرير و اختبار أكواد الـ PL/SQL داخل الـ database ، متضمنة object types و packages و procedures و functions و triggers .
طريقة واحدة لفعل لذلك ، أن تكتب ملف SQL script في الـ JDeveloper ثم تقوم بتشغيله على الـdatabase .
هناك طريقة أخرى وهي إنشاء PL/SQL object مباشرة داخل الـ database .

في هذا الدرس سوف نشئ object type وهو order_items_rec والذي يخرج الـ records بترتيب معين . ثم بعدها ننشئ package تحتوي على function وهي get_order_items والتي تعيد النتائج بترتيب معين يعتمد على الـ order_items_rec . بالنهاية نقوم بإنشاء الـ package body لتشغيل الـ Query و نشر الـ order_items_rec .
نختبر الـ Package باستخدام خاصية الـ debug الموجودة في الـ JDeveloper .

  • منح الـ FOD خاصية الـ debug .
  • تشغيل SQL script لإنشاء object type .
  • إنشاء PL/SQL Package مباشرة .
  • اختبار و تصحيح PL/SQL Function .

منح الـ FOD خاصية الـ debug

قبل أن تكون قادر على استخدام خاصية الـ debugging تحتاج إلى إتاحة الـ FOD الصلاحيات المناسبة .

1- لإعداد الصلاحيات للـ FOD ، من القائم اختر Tools | Database | SQL Worksheet .

t50001

2- في المربع الحواري Select Connection اضغط OK لقبول FOD(DBModeling) connection .

t50002

3- في شاشة الـ SQL Worksheet أدخل الأمر

 connect system/oracle;

 

(مع كتابة الـ system name والـ password ليتيح لك استخدام DBA statements)

t50003

4- اضغط على الأيقونة Execute Script icon_Run_Script لتشغيل الكود .

t50004يجب أن لا تخرج شاشة الـ Script Output أي خطأ .

تشغيل SQL script لإنشاء object type

1- لإنشاء SQL script اضغط بزر الماوس الأيمن على PhysicalModel project في متصفح التطبيق واختر New لفتح الت New Gallery .

t50101

2- في قائمة Categories ، افرد Database Tier واختر Database Files ثم اختر SQL File من قائمة الـ Items ثم اضغط OK .

t50102

3- في المربع الحواري Create SQL File عدّل قيمة الـ File Name واجعلها order_items_rec.sql ، ثم اضغط OK .

t50103الملف الفارغ سيتم فتحه في محرر الكود -code editor- .

4- انسخ هذا الكود وضعه داخل الملف :

REM

REM Create object ORDER_ITEMS_REC

REM

CREATE or REPLACE type ORDER_ITEMS_REC as object

(

ORDER_ID NUMBER(15),

LINE_ITEM_ID NUMBER(3),

PRODUCT_ID NUMBER(15),

QUANTITY NUMBER(6),

UNIT_PRICE NUMBER(8,2),

CREATED_BY VARCHAR2(60),

CREATION_DATE DATE,

LAST_UPDATED_BY VARCHAR2(60),

LAST_UPDATE_DATE DATE,

OBJECT_VERSION_ID NUMBER(15)

);

/

show errors;

اضغط التبويب SQL Worksheet ثم اختر FOD connection .

t50104

اضغط على أيقونة Run Script .

t50104b

5- يجب أن لا تخرج شاشة الـ Script Output أي خطأ .

t50105

اضغط Save All لحفظ ما قمت به من عمل .

6- في التبويب Application Resources داخل الـ Connections Navigator افرد Database| FOD | Types لتجد الـ object type الجديد ORDER_ITEMS_REC .

t50106

إنشاء PL/SQL Package مباشرة .

لقد رأينا للتو كيفية إنشاء PL/SQL object ، أولا أنشأنا script وبعد ذلك قمنا بتشغيله .
في هذا الدرس سننشئ PL/SQL package والمسماه ORDER_ITEMS_FETCH مباشرة داخل الـ database .

1- اضغط التبويب Databases لفتح الـ Database Navigator (الختر View | Database | Database Navigator إن لم يكن مفتوحاً) ، في الـ Database Navigator ، افرد DBModeling و FOD ، اضغط بزر الماوس الأيمن على Packages واختر New Package من القائمة .

t50201

2- في المربع الحواري Create PL/SQL Package أدخل القيمة ORDER_ITEMS_FETCH كـ Name ثم اضغط Ok .

t50202الـ ORDER_ITEMS_FETCH package تفتح في محرر الكود -Code Editor- .

t50202b

3- في محرر الكود للـ ORDER_ITEMS_FETCH package اكتب هذا الكود بين السطرين الموجودين ، لإنشاء get_order_items function .

FUNCTION get_order_items

(order_id_no IN NUMBER,

line_item_id_no IN NUMBER)

RETURN ORDER_ITEMS_rec;

t50203

4- اضغط أيقونة Save لحفظ الـ package التي عدّلتها ، وستظهر في المتصفح ما يعني أنه تمك تخزينها داخل الـ database .

t50204

5- اضغط بزر الماوس الأيمن على ORDER_ITEMS_FETCH واختر Create Body .

t50205

6- قالب الـ package body يفتح في محرر الكود .

t50206

7- في محرر الكود لـ ORDER_ITEMS_FETCH package body ، أدخل هذا الكود الذي شغل الـ Query و يعبئ الـ order_items_found record .
(أدخل الكود الغليظ و ليس المائل الموجود بالفعل في الملف)

PACKAGE BODY ORDER_ITEMS_FETCH AS

FUNCTION get_order_items(order_id_no IN NUMBER,
line_item_id_no IN NUMBER)
RETURN ORDER_ITEMS_rec AS

order_items_found order_items%rowtype;
order_items_rtn order_items_rec;
BEGIN
/* TODO implementation required */

SELECT *
INTO order_items_found
FROM order_items
WHERE order_items.order_id=order_id_no
-- and order_items.line_item_id = line_item_id_no;

order_items_rtn := order_items_rec
(order_items_found.order_id,
order_items_found.line_item_id,
order_items_found.product_id,
order_items_found.quantity,
order_items_found.unit_price,
order_items_found.created_by,
order_items_found.creation_date,
order_items_found.last_updated_by,
order_items_found.last_update_date,
order_items_found.object_version_id
);
RETURN order_items_rtn;
END get_order_items;
END ORDER_ITEMS_FETCH;

(Note: Delete the line RETURN NULL;)

t50207

8- في محرر الكود ، تحت سطر التعليق -commented line- أدخل هذا السطر

and order_items.line_item_id = line_item_id_no;

لكي نلاحظ ذدرة الـ JDeveloper على توقع والمساعدة في إكمال الكود ، أكتب and order_items ستظهر popup windows تتيح لك الاختيار منها ما يناسبك من الكود .

t50207c

9- اضغط الأيقونة Compile لعمل compile للـ package body .

t50208

اختبار و تصحيح PL/SQL Function

1- في محرر الكود وعلى الهامش الأيسر اضغط بالماوس قبالة جملة الـ Return لعمل breakpoint .

t50300

2- وفي الـ Database Navigator اضغط بزر الماوس الأيمن على ORDER_ITEMS_FETCH package واختر Compile for Debug من القائمة .

t503001

3- وأيضاً في الـ Database Navigator اضغط بزر الماوس الأيمن على ORDER_ITEMS_FETCH package واختر Debug من القائمة .

t503002

4- في لمربع الحواري Debug PL/SQL نفذ هذه التعديلات ليكون ORDER_ID_NO بالقيمة 1001 والـ LINE_ITEM_ID_NO بالقيمة 2 :

Change the line
ORDER_ID_NO := NULL;
to
ORDER_ID_NO := 1001;

Change the line
LINE_ITEM_ID_NO := NULL;
to
LINE_ITEM_ID_NO := 2;
Uncomment and change the line
--DBMS_OUTPUT.PUT_LINE('v_Return = ' || v_Return);
to
DBMS_OUTPUT.PUT_LINE('v_Return = Product_id: ' || v_Return.product_id || ' Qty: ' || v_Return.quantity ||' Price: '|| v_Return.unit_price);

t50302

اضغط Ok ، لو ظهر تحذير Window Security Alert اضغط Unblock .

t50302b

5- شاشة Debugging Log تعرض توقف عملية تشغيل الـ package .

t503022اختر التبويب Data في شاشة الـ Log بجوار التبويب Debug ، أو افتحها باختيار View | Debugger | Data من القوائم .

t503022b

6- وفي الـ Data pane افرد الـ ORDER_ITEMS_FOUND node ، كل القيم الخاصة بالصف -Record– الذي تم استرجاعه تم عرضها .

t503023

7- في شريط أدوات الـ Debugging اضغط الزر Resume لتنهي عملية تشغيل الـ package .

t503024

8- شاشة الـ log تعرض خرج الـ get_order_items() function في الـ ORDER_ITEMS_FETCH package .

t503025

9- في محرر الكود اضغط على الزر الأحمر في الهامش الأيسر لإزالة الـ breakpoint لعمل recompile للـ package باستخدام زر الـ Compile .

t503026

وبالتالي نكون قد انتهينا من هذا الجزء .

ليست هناك تعليقات:

إرسال تعليق

---- أتشرف بتعليقاتكم ----