Oracle إدراج PL/SQL وتحديثه وحذفه وتحديده [مثال]
⚡ ملخص ذكي
عبارات SQL بالداخل Oracle تتولى لغة PL/SQL جميع مهام معالجة البيانات، مما يسمح لكتلة برمجية بإدراج وتحديث وحذف واستعلام الصفوف مباشرةً. وتقوم أوامر INSERT وUPDATE وDELETE وSELECT INTO بنقل واسترجاع البيانات داخل قاعدة البيانات.

معاملات DML في PL/SQL
DML اختصار لـ Data Manipulation Language، وهي مجموعة من SQL أوامر تُغيّر البيانات المخزنة في جدول. ضمن كتلة بل/SQLتُنفّذ هذه الأوامر عمليات المعالجة، بينما تُوفّر لغة PL/SQL المنطق المحيط بها. وتتعامل لغة DML مع العمليات المذكورة أدناه.
- ادراج البيانات
- تحديث البيانات
- حذف البيانات
- اختيار البيانات
في لغة PL/SQL، تتم معالجة البيانات فقط من خلال أوامر SQL.
ادراج البيانات
في لغة PL/SQL، تُضاف الصفوف إلى جدول باستخدام أمر SQL INSERT INTO. يأخذ هذا الأمر اسم الجدول، والأعمدة المستهدفة، وقيم الأعمدة كمدخلات، ثم يُدرج القيمة في الجدول الأساسي.
يمكن لأمر INSERT أيضًا استيراد القيم مباشرةً من جدول آخر باستخدام عبارة SELECT، بدلاً من تحديد قيم كل عمود على حدة. ومن خلال عبارة SELECT، يمكن إدراج عدد من الصفوف يساوي عدد الصفوف الموجودة في الجدول المصدر دفعة واحدة.
بناء الجملة:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
يوضح الشكل أعلاه صيغة أمر INSERT INTO. اسم الجدول والقيم حقول إلزامية، بينما أسماء الأعمدة اختيارية عندما تُحدد قيم لكل عمود في الجدول في عبارة INSERT. الكلمة المفتاحية VALUES إلزامية عند تحديد القيم بشكل منفصل، كما هو موضح أعلاه.
بناء الجملة:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
يأخذ هذا الشكل الثاني من عبارة INSERT INTO القيم مباشرة من باستخدام أمر SELECT. يجب عدم وجود الكلمة المفتاحية VALUES هنا لأن القيم لا يتم توفيرها بشكل منفصل.
تحديث البيانات
تحديث البيانات يعني تغيير قيمة عمود في صف موجود. ويتم ذلك باستخدام عبارة UPDATE، التي تأخذ اسم الجدول واسم العمود والقيمة الجديدة كمدخلات، ثم تُحدّث البيانات.
بناء الجملة:
BEGIN UPDATE <table_name> SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be updated>; END;
يوضح الشكل أعلاه عبارة التحديث (UPDATE). تُوجّه الكلمة المفتاحية SET محرك PL/SQL لتحديث العمود بالقيمة المُعطاة. شرط WHERE اختياري؛ فإذا لم يُحدد، تُحدّث قيمة العمود المذكور في الجدول بأكمله.
حذف البيانات
حذف البيانات يعني إزالة سجل كامل من جدول قاعدة البيانات. ويُستخدم أمر DELETE لهذا الغرض.
بناء الجملة:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
يوضح الشكل أعلاه صيغة أمر الحذف (DELETE). الكلمة المفتاحية FROM اختيارية، ويتصرف الأمر بنفس الطريقة سواءً استخدمتَها أم لا. أما شرط WHERE فهو اختياري أيضًا؛ فإذا لم يُستخدم، سيتم إفراغ الجدول بالكامل.
اختيار البيانات
يُقصد بعرض البيانات، أو جلبها، استرجاع البيانات المطلوبة من جدول قاعدة البيانات. ويتم ذلك باستخدام أمر SELECT مع عبارة INTO. يقوم أمر SELECT بجلب القيم من قاعدة البيانات، بينما تقوم عبارة INTO بتعيين هذه القيم إلى المتغيرات المحلية في كتلة PL/SQL.
يجب مراعاة النقاط التالية عند استخدام عبارة SELECT مع INTO:
- يجب أن تُرجع عبارة SELECT سجلًا واحدًا فقط عند استخدام عبارة INTO، لأن المتغير الواحد لا يمكنه استيعاب سوى قيمة واحدة. إذا أرجعت عبارة SELECT أكثر من صف واحد، فإن استثناء TOO_MANY_ROWS تربى.
- تُسند عبارة SELECT القيمة إلى المتغير الموجود في عبارة INTO، لذا فهي تحتاج إلى سجل واحد على الأقل لتعبئة القيمة. إذا لم يتم العثور على أي سجل، فسيتم طرح استثناء NO_DATA_FOUND.
- يجب أن يتطابق عدد الأعمدة وأنواع بياناتها في عبارة SELECT مع عدد المتغيرات وأنواع بياناتها في عبارة INTO.
- يتم جلب القيم وتعبئتها بنفس الترتيب المذكور في البيان.
- يُعد شرط WHERE اختياريًا ويسمح لك بوضع المزيد من القيود على السجلات التي يتم جلبها.
- يمكن استخدام عبارة SELECT في شرط WHERE لعبارات DML الأخرى لتحديد قيم الشروط.
- لا ينبغي أن تحتوي عبارة SELECT المستخدمة داخل عبارات INSERT أو UPDATE أو DELETE على عبارة INTO، لأنها لا تقوم بتعبئة أي متغير في تلك الحالات.
بناء الجملة:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
يوضح الشكل أعلاه صيغة أمر SELECT-INTO. الكلمة المفتاحية FROM إلزامية، وتُحدد الجدول الذي تُسترجع منه البيانات. أما شرط WHERE فهو اختياري؛ فإذا لم يُحدد، فسيتم استرجاع البيانات من الجدول بأكمله.
مثال 1: في هذا المثال، سنرى كيفية تنفيذ عمليات DML في لغة PL/SQL. سنقوم بإدراج السجلات الأربعة التالية في جدول الموظفين (emp).
| EMP_NAME | EMP_NO | المرتبات | مدير |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| YYY | 1002 | 10000 | BBB |
| ZZZ | 1003 | 7500 | BBB |
ثم سنقوم بتحديث راتب 'XXX' إلى 15000، وحذف سجل الموظف 'ZZZ'، وأخيراً عرض تفاصيل الموظف 'XXX'.
تُظهر لقطة الشاشة أدناه كتلة PL/SQL الكاملة المستخدمة في هذا المثال.
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('BBB',1000,25000,'AAA'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('ZZZ',1003,7500,'BBB'); COMMIT; Dbms_output.put_line('Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line('Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT; Dbms_output.put_line('Values Deleted'); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms_output.put_line('Employee Detail'); Dbms_output.put_line('Employee Name:'||l_emp_name); Dbms_output.put_line('Employee Number:'||l_emp_no); Dbms_output.put_line('Employee Salary:'||l_salary); Dbms_output.put_line('Employee Manager Name:'||l_manager); END; /
الإخراج:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code التفسير:
- Code الأسطر 2-5: تعريف المتغيرات.
- Code الأسطر 7-14: إدخال السجلات في جدول الموظفين.
- Code السطر 15: تنفيذ عمليات الإدراج.
- Code الأسطر 17-19: تحديث راتب الموظف 'XXX' إلى 15000.
- Code السطر 20: إتمام عملية التحديث.
- Code السطر 22: حذف سجل 'ZZZ'.
- Code السطر 23: إتمام عملية الحذف.
- Code السطر 25: تحديد سجل 'XXX' وتعبئة المتغيرات l_emp_name و l_emp_no و l_salary و l_manager.
- Code الأسطر 26-30: عرض قيم السجلات التي تم جلبها.

