Download presentation
Presentation is loading. Please wait.
1
جمل التحكم المحاضرة التاسعة T.Eman Alsqour
2
جمل التحكم مثل :جمل الشرط و جمل الدوران
مقدمة عادة تنفيذ الجمل داخل وحدة (Block) يكون بنفس الترتيب التي كتبت فيها هذه الجمل, لكن في بعض الأحيان نحتاج تغيير سير هذا التنفيذ أو تكرار جمل معينة , لحل هذه المشكلة نستخدم: جمل التحكم مثل :جمل الشرط و جمل الدوران T.Eman Alsqour
3
عند كتابة جملة الشرط لابد من وضع فاصلة منقوطة بعد انتهائها
جمل الشرط هناك 3 أنواع من جمل الشرط: جملة الشرط البسيطة IF Statment : تتكون من جملة الشرط تليها مجموعة الجمل الواجب تنفيذها في حال تحقق الشرط. مثال: DECLARE v_sal NUMBER ; BEGIN …. IF v_ename = ‘Ali’ THEN v_sal := 3500; END IF; END; عند كتابة جملة الشرط لابد من وضع فاصلة منقوطة بعد انتهائها T.Eman Alsqour
4
جمل الشرط 2. جملة الشرط IF THEN ELSE :
تتكون من مجموعتين من الجمل المجموعة الأولى وهي الواجب تنفيذها في حال تحقق الشرط والمجموعة الثانية وهي المجموعة الواجب تنفيذها في حال عدم تحقق الشرط. مثال: IF v_deptno = 10 THEN UPDATE emp SET sal = sal * 1.10 WHERE deptno = v_deptno; ELSE SET sal = sal * 1.08 END IF; T.Eman Alsqour
5
جمل الشرط T.Eman Alsqour
6
جمل الشرط 3. جملة الشرط IF THEN ELSIF :
تتكون من مجموعتين من الجمل الأولى وهي المجموعة الواجب تنفيذها في حال تحقق الشرط والمجموعة الأخرى هي مجموعة ل (IF) الخاصة ب(ELSE) وأيضا ممكن أن تكون مقسمة إلى جزأين مجموعة متحققة عند حصول الشرط والأخرى أيضا بدورها ممكن أن تكون مقسمة إلى جزأين بناء على الشرط الجديد الثاني (IF) التابع ل(ELS) الثانية وهكذا إلى أن نصل إلى مرحلة تكون هناك (ELSE) ليس لها (IF). T.Eman Alsqour
7
T.Eman Alsqour
8
جمل الشرط مثال: IF v_grade >100 OR v_grade < 0 THEN
DBMS_OUTPUT.PUT_LINE(‘Invalid Grade ’); ELSIF v_grade >= 90 THEN DBMS_OUTPUT.PUT_LINE(‘A’); ELSIF v_grade >= 80 THEN DBMS_OUTPUT.PUT_LINE(‘B’); ELSIF v_grade >= 70 THEN DBMS_OUTPUT.PUT_LINE(‘C’); ELSIF v_grade >= 60 THEN DBMS_OUTPUT.PUT_LINE(‘D’); ELSE DBMS_OUTPUT.PUT_LINE(‘F’); END IF; T.Eman Alsqour
9
جمل الشرط - أي تعبير حسابي يحتوي على NULL فإن النتيجة تكون NULL .
عند استخدام جمل الشرط يمكن ربط أكثر من شرط باستخدام: AND ,OR , NOT مثال: IF v_sal > AND v_job = ‘SALESMAN’ OR v_deptno = THEN ….. END IF ; T.Eman Alsqour
10
جداول المنطق نستخدم جداول المنطق لمعرفة نتيجة شرط مركب من أكثر من جزء.
NULL FALSE TRUE AND NULL FALSE TRUE OR TRUR NOT FALSE TRUE NULL T.Eman Alsqour
11
جداول المنطق مثال لتطبيق جداول المنطق في جمل الشرط: DECLARE
v_flag BOOLEAN DEFAULT TRUE; v_orderflag BOOLEAN ; BEGIN IF v_flag OR v_orderflag THEN v_flag := FALSE; v_orderflag := TRUE; END IF; IF v_flag AND v_orderflag THEN v_flag := TRUE; ELSIF v_flag = v_orderflag THEN v_flag := NULL; ELSE v_orderflag := FALSE; END IF ; END; إذا أنشئ متغير من نوع (BOOLEAN ) ولم تسند له أي قيمة فإن القيمة الابتدائية له ستكون NULL T.Eman Alsqour
12
حلقات الدوران حلقات الدوران في تعني إمكانية تكرار جملة أومجموعة من الجمل أثناء تنفيذ البرنامج. أشكال حلقات الدوران: حلقات الدوران البسيطة Basic Loop. حلقة الدوران FOR Loop. حلقة الدوران WHILE Loop. حلقات الدوران المتداخلة Nested LOOPS. T.Eman Alsqour
13
حلقة الدوران البسيطة Basic Loop
LOOP بداية الدوران Statement جسم الدوران ... EXIT [WHENcondition]; جملة الخروج من جسم الدوران عند تحقق الشرط ويمكن أن تكون الجملة في أي مكان في جسم الدوران END LOOP; جملة نهاية الدوران T.Eman Alsqour
14
حلقة الدوران البسيطة Basic Loop
مثال: DECLARE v_ordid item.ordid%TYPE := 601; v_counter NUMBER(2) := 1; BEGIN LOOP INSERT INTO item(ordid, itemid) VALUES(v_ordid, v_counter); v_counter := v_counter + 1; EXIT WHEN v_counter > 10; END LOOP; END; T.Eman Alsqour
15
حلقة الدوران FOR Loop <sequence of statements> جسم الدوران
FOR <counter> IN [REVERSE]<lower bound>..<upper bound> LOOP بداية الدوران <sequence of statements> جسم الدوران END LOOP; نهاية الدوران نستخدم حلقة الدوران FOR Loop في الحالات التي يكون فيها عدد مرات التكرار معروف قبل التنفيذ مثل 10 مرات ,5مرات ...إلخ T.Eman Alsqour
16
حلقة الدوران FOR Loop مثال: BEGIN FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('i= '||i); END LOOP; END; أو يمكن كتابة نفس وحدة (Block) بالأعلى بالشكل التالي: DECLARE v_lower number:=1; v_upper number:=5; FOR i IN v_lower.. v_upper LOOP الناتج الذي سيظهر على الشاشة: i= 1 i= 2 i= 3 i= 4 i= 5 T.Eman Alsqour
17
حلقة الدوران FOR Loop لو أردنا استخدام حلقة الدوران (FOR Loop) مع ” REVERSE“ - مثال: BEGIN FOR i IN REVERSE 1..5 LOOP DBMS_OUTPUT.PUT_LINE('i= '||i); END LOOP; END; الناتج الذي سيظهر على الشاشة: i= 5 i= 4 i= 3 i= 2 i= 1 T.Eman Alsqour
18
حلقة الدوران WHILE Loop
نستخدم في الحالات التي يكون فيها عدد مرات التكرار غير معروف قبل التنفيذ , فهي تشبه حلقة الدوران البسيطة ولكن بعكس الشرط. WHILE (condition) بداية الدوران statement; جسم الدوران . . . END LOOP; نهاية الدوران T.Eman Alsqour
19
حلقة الدوران WHILE Loop
مثال: DECLARE v_Counter BINARY_INTEGER := 1; BEGIN WHILE (v_Counter <= 50) LOOP INSERT INTO employee (id) VALUES (v_Counter); v_Counter := v_Counter + 1; END LOOP; END; T.Eman Alsqour
20
حلقات الدوران المتداخلة Nested LOOPS
هي عبارة عن حلقات دوران داخل بعضها البعض كل منها يمثل مستوى ويمكن أن تكون كل حلقة تمثل نوع مختلف من حلقات الدوران. لتمييز هذه المستويات عن بعضها البعض إذ لابد من استخدام عنوان للحلقة (label). عند الخروج من حلقة الدوران لا بد من ذكر عنوان الحلقة (label) لأن جملة الخروج تؤدي إلى الخروج من الدوران الداخلي والانتقال إلى المستوى الأكبر منه لبدء دورة جديدة. T.Eman Alsqour
21
مثال على حلقات الدوران المتداخلة Nested LOOPS
DECLARE v_s NUMBER := 0; v_i NUMBER := 0; v_j NUMBER ; BEGIN <<outer_loop>> LOOP v_i := v_i + 1; v_j := 0; <<inner_loop>> v_j := v_j + 1; v_s := v_s + v_i * v_j; -- sum a bunch of products EXIT inner_loop WHEN (v_j > 5); EXIT outer_loop WHEN ((v_i * v_j) > 15); END LOOP inner_loop; END LOOP outer_loop; DBMS_OUTPUT.PUT_LINE('The sum of products equals: ' || TO_CHAR(s)); END; T.Eman Alsqour
22
الخلاصة جمل التحكم: جمل الشرط. - جملة الشرط البسيطة IF Statment
- جملة الشرط IF THEN ELSE - جملة الشرط IF THEN ELSIF 2. حلقات الدوران. حلقات الدوران البسيطة Basic Loop. حلقة الدوران FOR Loop. حلقة الدوران WHILE Loop. حلقات الدوران المتداخلة Nested LOOPS. جداول المنطق. T.Eman Alsqour
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.