كتابة النصوص البرمجية في الاجراءات المخزنة في قواعد البيانات اوراكل oracle بالعربي كتابة النصوص البرمجية في الاجراءات المخزنة في قواعد البيانات اوراكل oracle بالعربي - اقرا معي وتعلم على الانترنت

كتابة النصوص البرمجية في الاجراءات المخزنة في قواعد البيانات اوراكل oracle بالعربي

السلام عليكم ورحمة الله وبركاته نواصل سلسلة دروس sql بالعربي هذا الدرس يتبع الاجراءات المخزنة وهو بعنوان كتابة النصوص البرمجية في الاجراءات المخزنة ..

كتابة النصوص البرمجية في الاجراءات المخزنة في قواعد البيانات اوراكل oracle بالعربي

لقراءة الدروس السابقة يمكنكم زيارة الرابط التالي 

كتابة النصوص البرمجية في الإجرائيات المخزنة:

ذكرنا مسبقًا أنّ الإجرائيات المخزنة تتألف بصورة أساسية من تعابير SQL بالإضافة إلى لغة برمجة بنيوية تتضمن تعابير خاصة للتنفيذ الشرطي والحلقات وإمكانيات أخرى.
تختلف التعابير البرمجية بين أنظمة قواعد البيانات ولكنها تتشابه في التعليمات الأساسية.

 التعبير IF………..ELSE وهو بالصيغة:

IF condition
conditionTrueBody;
ELSE
conditionFalseBody;
حيث تمثل condition الشرط الواجب تحققه لتنفيذ العبارات التي تمثلها conditionTrueBody وإلا سيتم تنفيذ العبارات التي تمثلها conditionFalseBody .

التعبير CASE………….WHEN ويكتب بالصيغة:

CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
…..
WHEN valueN THEN resultN
ELSE resultElse
END;
في هذه الصيغة سيتم تقييم التعبير expression ومقارنته مع القيم Value1…..ValueN وستكون نتيجة هذه الصيغة هي النتيجة result المقابلة لأول عملية مطابقة، وإلا سيتم تنفيذ النتيجة resultElse .
سنقوم فيمايلي باستعراض عمل هذه البنى واختلافات تطبيقها بين قواعد البيانات المختلفة.

التعابير الشرطية

سنرى كيفية استثمار التعابير الشرطية  CASE…WHEN و IF…ELSE في قواعد بيانات SQL Server ونحدد بعد ذلك الاختلافات في حال استخدام أنواع قواعد البيانات الأخرى.

التركيب :IF..ELSE

تأخذ بنية IF….ELSE الشرطية الصيغة التالية في SQL Server :
IF condition
BEGIN
trueStatments
END
ELSE
BEGIN
falseStatments
END
يمكن حذف END و BEGIN من الصيغة السابقة في حال كان المطلوب تنفيذ تعبير واحد في كتلة BEGIN END .
كما يمكن كذلك الاستغناء عن ELSE مع الكتلة الخاصة بها في حال عدم الرغبة بتنفيذ أي تعبير عند عدم تحقق الشرط.

مثال:

إذا أردنا أن نكتب الإجرائية المخزنة التي تقوم بحساب كمية المبيعات من مادة ما، وكتابة تعليق في حقل خاص في جدول المواد
عن ضرورة إيقاف هذه السلعة في حال عدم بيع أي كمية منها، نكتب الصيغة:
CREATE PROCEDURE getSalesAndComment
(@myProductID INT, @mySales INT OUTPUT,@myComment VARCHAR(40) OUTPUT)
AS
BEGIN
SET @mySales= (Select sum(Quantity) from sales
where productID=@myProductID);
IF @mySlales=0
SET @myComment=’STOP THIS PRODUCT’;
ELSE
SET @myComment=’KEEP THIS PRODUCT’;
Update products set ProductComment=@myComment
Where productID=@myProductID ;
END
نلاحظ أننا لم نستخدم كتلة BEGIN END لأننا لم نطلب تنفيذ سوى أمر واحد ضمن كتلة IF و ELSE لاستخدام هذه الإجرائية يمكننا كتابة الصيغة :
DECLARE @theComment VARCHAR(40);
DECLARE @theSales INT
EXECUTE getSalesAndComment(3, @theSales OUTPUT, @theComment OUTPUT);
PRINT @theSales;
PRINT @theComment;
نلاحظ أننا صرحنا عن المتغيرات التي سيتم إعادتها من الإجرائية وقمنا بطباعتها.

التركيب :CASE.WHEN

تأخذ بنية CASE…WHEN الشرطية الصيغة التالية في :SQL Server
SET @aVariable= CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
…..
WHEN valueN THEN resultN
ELSE resultElse
END;
لا نستطيع استخدام التركيب CASE…WHEN في SQL Server إلا ضمن عبارة SELECT .
يمكن استخدام التعبير CASE دون وضع أي تعبير بعدها حيث يمكن هنا استخدام value1…valueN لوضع شروط مختلفة.

مثال:

إذا أردنا أن نكتب الإجرائية المخزنة التي تقوم بعرض عبارة تعتمد على علامة طالب وتعبر عن مستواه بعد أن تأخذ على الدرجة
التي حصل عليها:
CREATE PROCEDURE getStudentLevel
(@myStudentName VARCHAR(50), @myStudentLevel VARCHAR(40) OUTPUT)
AS
BEGIN
DECLARE studentGrade INT;
SET @studentGrade= (Select studentGrade from students
where studentName=@myStudentName);
SET @myStudentLevel= CASE
WHEN @studentGrade>80 THEN ‘VERY GOOD’
WHEN @studentGrade>70 THEN ‘GOOD’
WHEN @studentGrade>60 THEN ‘NOT BAD’
WHEN @studentGrade>50 THEN ‘PASS’
WHEN @studentGrade<50 THEN ‘FAIL’
END;
END;
و لاستخدام هذه الإجرائية يمكننا كتابة الصيغة:
DECLARE @theStudentLevel VARCHAR(40);
EXECUTE getSalesAndComment(‘sami’, @ theStudentLevel OUTPUT);
PRINT @ theStudentLevel;
هنا كما نلاحظ صرحنا عن المتغيرات التي سيتم إعادتها من الإجرائية وقمنا بطباعتها.
يتم تطبيق التراكيب CASE…WHEN و IF…ELSE في Oracle و MySQL و DB2 بصورة مشابهة لتلك المستخدمة في SQL Server مع الانتباه إلى الاختلافات التالية:
1 في Oracle و DB2 و MySQL يمكنك استخدام ELSE…IF في التركيب IF…ELSE لتقييم شروط إضافية.
2 في Oracle و DB2 و MySQL  يمكن لـ CASE…WHEN أن ٌتستخدم بصورة منفصلة وليست بحاجة لأن تكون جزء من عبارة إسناد قيمة لمتغير، أو جزء من عبارة SELECT كما هي الحال في SQL Server .
يتم اغلاق التركيب CASE…WHEN بالتعبير END CASE  وليس END كما هو الحال في SQL Server.
بالطبع لن نغفل الاختلافات المذكورة مسبقًا كضرورة تحويل إشارات المساواة إلى إشارات := في Oracle عوضًا عن استخدام .SET

مثال :

لنكتب الإجرائية المخزنة التي تقوم بإدراج حجز جديد ضمن جدول الحجوزات Reservations وحساب كلفة الحجز بناء على عدد الأيام ونوع الغرفة، بصيغة قواعد بيانات Oracle :
            CREATE OR REPLACE PROCEDURE Reservations
(myRoomType IN varchar(10), myDays IN INT)
AS
BEGIN
IF myRoomType= ‘Single’ THEN
Insert Into Reservations (roomType, Fee)
Values(myRoomType,20*myDays);
ELSEIF myRoomType=’Double’ THEN
Insert Into Reservations (roomType, Fee)
Values(myRoomType,35*myDays);
ELSEIF myRoomType=’Sweet’ THEN
Insert Into Reservations (roomType, Fee)
Values(myRoomType,45*myDays);
END IF;
END;
و لاستخدام هذه الإجرائية يمكننا كتابة الصيغة:
CALL Reservations (‘Single’,5);


انتهى الى الملتقى في الدرس القادم بعنوان الحلقات والتكرار


شارك الموضوع
تعليقات
محتوى قد يهمك

.