مقدمة شاملة في PL/SQL: لغة البرمجة للإجراءات المخزنة في Oracle
مقدمة
PL/SQL (Procedural Language/Structured Query Language) هي لغة برمجية مدمجة مع قاعدة البيانات Oracle، وتُعد امتدادًا للغة SQL القياسية. تهدف هذه اللغة إلى توفير بيئة مرنة وديناميكية لكتابة البرامج التي تتفاعل مع قواعد البيانات بشكل فعال. تجمع PL/SQL بين ميزات لغة SQL ولغات البرمجة التقليدية مثل البرمجة الإجرائية، مما يجعلها أداة قوية لإنشاء تطبيقات قواعد البيانات المعقدة.
تاريخ PL/SQL وتطورها
تم تطوير PL/SQL لأول مرة في أواخر الثمانينيات بواسطة شركة Oracle لتعزيز إمكانيات SQL العادية. في الإصدارات الأولى من Oracle Database، كانت SQL قوية بما يكفي لتنفيذ العمليات البسيطة، ولكنها كانت تفتقر إلى التحكم في التدفق والمنطق البرمجي المعقد. وهكذا، جاءت PL/SQL لتقديم هذه الميزات مع التوافق الكامل مع SQL.
مع تطور Oracle Database، شهدت PL/SQL تحسينات كبيرة عبر الإصدارات المختلفة. تشمل هذه التحسينات دعم المزايا الجديدة مثل الحزم، والمحركات الديناميكية، ودوال التحليل، مما يجعل PL/SQL أكثر قوة ومرونة.
ميزات PL/SQL
PL/SQL تتمتع بالعديد من الميزات التي تجعلها لغة برمجية مفضلة لتطوير تطبيقات قواعد البيانات، ومن أبرزها:
1. التكامل مع SQL
PL/SQL مدمجة تمامًا مع SQL، مما يعني أنه يمكنك كتابة استعلامات SQL داخل كود PL/SQL بسهولة. يمكن تنفيذ عمليات الاستعلام والإدخال والتحديث والحذف مباشرة ضمن البرامج.
2. إجراءات مخزنة وبرامج فرعية
توفر PL/SQL القدرة على إنشاء إجراءات مخزنة (Stored Procedures)، ودوال (Functions)، وحزم (Packages) لتحسين كفاءة العمليات المتكررة.
3. التحكم في التدفق
تتيح اللغة استخدام أوامر التحكم في التدفق مثل IF-THEN-ELSE وLOOP وWHILE، مما يمنح المبرمجين مرونة لتنفيذ المنطق البرمجي المعقد.
4. إدارة الأخطاء
تُعد إدارة الأخطاء واحدة من أبرز ميزات PL/SQL، حيث يمكن التقاط الأخطاء ومعالجتها باستخدام كتل EXCEPTION.
5. الأمان والأداء
الإجراءات المخزنة المكتوبة بـ PL/SQL تُنفذ على الخادم مباشرة، مما يحسن الأداء ويزيد من أمان البيانات لأنها تقلل حركة البيانات بين العميل والخادم.
مكونات PL/SQL
PL/SQL تتكون من ثلاث وحدات أساسية:
1. الإعلانات (Declarations)
هذه الوحدة تُستخدم لتعريف المتغيرات والثوابت. مثال:
DECLARE
v_salary NUMBER(10,2);
v_name VARCHAR2(50);
BEGIN
-- Body code here
END;
2. الجسم الرئيسي (Executable Section)
الجسم الرئيسي هو المكان الذي تُكتب فيه الأوامر البرمجية مثل SQL والتحكم في التدفق.
3. كتلة معالجة الأخطاء (Exception Handling)
هذه الوحدة تُستخدم لمعالجة الأخطاء غير المتوقعة. مثال:
BEGIN
-- Some executable code
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No data found!');
END;
أنواع الكتل البرمجية في PL/SQL
1. الكتل المجهولة (Anonymous Blocks)
تُكتب الكتل المجهولة دون اسم، وتُستخدم عادةً لمهام مؤقتة. مثال:
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, PL/SQL!');
END;
2. الإجراءات (Procedures)
الإجراءات هي برامج مخزنة تُنفذ مهام معينة دون إرجاع قيمة. مثال:
CREATE OR REPLACE PROCEDURE greet_user IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Welcome to Oracle PL/SQL!');
END;
3. الدوال (Functions)
الدوال تُعيد قيمة عند استدعائها. مثال:
CREATE OR REPLACE FUNCTION add_numbers (a NUMBER, b NUMBER) RETURN NUMBER IS
BEGIN
RETURN a + b;
END;
4. الحزم (Packages)
الحزم هي مجموعات من الإجراءات والدوال تُعرف داخل وحدة واحدة، مما يساعد على تنظيم الكود.
استخدامات PL/SQL
1. أتمتة العمليات
يمكن استخدام PL/SQL لإنشاء إجراءات مخزنة تنفذ العمليات اليومية بشكل آلي، مثل معالجة الرواتب أو توليد التقارير.
2. معالجة البيانات
PL/SQL تدعم العمليات المعقدة على البيانات، مثل التجميع، الفرز، والترتيب.
3. الأمان
باستخدام PL/SQL، يمكن إنشاء واجهات آمنة للوصول إلى البيانات دون إعطاء المستخدمين صلاحيات مباشرة.
4. التكامل مع التطبيقات
تستخدم PL/SQL للتواصل مع تطبيقات خارجية مثل Java و. NET باستخدام مكتبات Oracle.
مثال عملي شامل
مهمة: إنشاء برنامج لمعالجة بيانات الموظفين وزيادة الرواتب بناءً على الأداء
CREATE OR REPLACE PROCEDURE update_salary IS
CURSOR emp_cursor IS
SELECT employee_id, salary, performance_rating FROM employees;
v_employee_id employees.employee_id%TYPE;
v_salary employees.salary%TYPE;
v_performance employees.performance_rating%TYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO v_employee_id, v_salary, v_performance;
EXIT WHEN emp_cursor%NOTFOUND;
IF v_performance = 'Excellent' THEN
v_salary := v_salary * 1.20;
ELSIF v_performance = 'Good' THEN
v_salary := v_salary * 1.10;
ELSE
v_salary := v_salary * 1.05;
END IF;
UPDATE employees
SET salary = v_salary
WHERE employee_id = v_employee_id;
END LOOP;
CLOSE emp_cursor;
END;
أفضل الممارسات في PL/SQL
- تقسيم الكود إلى وحدات صغيرة: استخدم الحزم والإجراءات لتجنب الكود المكرر.
- إدارة الأخطاء بفعالية: لا تنسَ معالجة الأخطاء باستخدام كتل EXCEPTION.
- اختبار الأداء: تأكد من تحسين الاستعلامات والبرامج لتجنب الحمل الزائد على قاعدة البيانات.
- تسمية واضحة: استخدم أسماء متغيرات وإجراءات واضحة لتسهيل الصيانة.
ملخص
اولا :ماهى pl/sql
ثانيا :طريقة كتابة كود pl/sql
ثالثا: كتابة اول برنامج باستخدام pl/sql
اولا :ماهى pl/sql
هى لغة البرمجة الخاصة بشركة اوراكل وهى امتداد للغة sql .
فنتيجة لضعف لغة قواعد البيانات sql
فقد قررت اوراكل انشاء هذة اللغة
يعنى على سبيل المثال انا لو عاوز اتحكم فى برنامج معين او مسار برنامج
لغة ال sql مش هتقدر تعمل الا انا محتاجة
من هنا اوراكل قدمت لنا الحل وهى لغة
pl/sql
ووفرت لنا هذة اللغة العديد من الامكانيات البرمجية مثل if _loop هكذا
يعنى على سبيل المثال
لو عاوز ازود المرتبات بس وفقا لقواعد معينة مثلا
لو الموظف بياخد مرتب كذا الزيادة بتعتة كذا
ولو بياخد مرتب كذا الزيادة بتعتة كذا
هنا بقا لازم استخدم هذة اللغة الاجرائية.
ثانيا : طريقة كتابة كود pl/sql
يتم كتابة كود pl/sql داخل بلوك Block
كل بلوك مسئول عن وظيفة معينة كالاتى :
Declare (optional )
هنا يتم تعريف اى شي سوف يتم استخدامة فى البرنامج
من متغيرات وهكذا وتكون اختيارية .
begin ( mandatory)
هنا يتم كتابة جمل sql وجمل pl/sql .
exception (optional )
هنا يتم معالجة الاخطاء المتوقع ان تحدث أثناء تنفيذ البرنامج وتكون اختيارية .
end; (mandatory ).
وهى نهاية البلوك ولابد من كتابه end;
ثالثا: كتابة اول برنامج باستخدام pl/sql
هنا هوضح اذى هعرض output للمستخدم
اولا لازم اشغل عملية الطباعة باستخدام الامر
Set serveroutput on;
الامر السابق يسمح بالطباعة على الشاشة.
طب اية هو امر الطباعة
هو ; ( الرسالة ) DBMS_output.put_line
وهنا هنقف شوية
لو انا عاوز اعرض رسالة نصية او تاريخ يكتب بداخل single code ‘ ‘
طب لو عاوز اطبع رقم او معادلة حسابية مثلا 2*3+2 هيكون بدون single code .
بعض الملاحظات :
لو تم وضع المعادلة الحسابية بين single code تعامل كانها نص .
يمكن استخدام | | concatenation للدمج بين اكثر من نص او بين جزء نصى ورقمى او معادلة.
ملخص الدرس
ان كود pl يكتب داخل بلوك كالتالى
Set serveroutput on;
لتفعيل عمليات الطباعة
declare
لانشاء المتغيرات وغيرها
begin
لكتابة الاكواد المستخدمة فى البرنامج
exception
معالجة الاخطاء اثناء التشغيل
end;
نهاية البلوك
الخاتمة
PL/SQL هي أداة أساسية لأي مبرمج أو مسؤول قواعد بيانات يعمل مع Oracle. بفضل ميزاتها المتقدمة وتكاملها القوي مع SQL، توفر بيئة مثالية لتطوير تطبيقات قواعد البيانات الديناميكية والفعالة. باستخدام PL/SQL، يمكنك تحقيق أداء عالٍ وأمان موثوق للتطبيقات، مما يجعلها الخيار الأمثل لمعالجة البيانات الكبيرة والمعقدة.
مصادر:
- Oracle Documentation – PL/SQL Language Reference
- كتاب Oracle PL/SQL Programming by Steven Feuerstein