گاهی اوقات نیاز است یک یا چند شرط بررسی شوند تا عملیات برنامه بر اساس آن شرط ها انجام گیرند. در شکل زیر ساختار کلی دستورات شرطی را مشاهده می کنید این دستورات برای تغییر روند کنترلی اجرای دستورات برنامه استفاده می شود.
در جدول زیر دستورات شرطی PL/SQL و توضیحات آنها را ملاحظه می کنید.
دستور شرطی IF – THEN
ساده ترین دستور شرطی دستور IF – THEN است. سینتکس این دستور به این شکل است:
IF condition THEN
Statement;
END IF;
در این سینتکس CONDITION شرط دستور و Statement بلاک دستورات است.
مثال 1:
IF (a <= 20) THEN
c:= c+1;
END IF;
مثال 2:
DECLARE
a number(2) := 10;
BEGIN
a:= 10;
— check the boolean condition using if statement
IF( a < 20 ) THEN
— if condition is true then print the following
dbms_output.put_line(‘a is less than 20 ‘ );
END IF;
dbms_output.put_line(‘value of a is : ‘ || a);
END;
/
خروجی:
a is less than 20
value of a is : 10
PL/SQL procedure successfully completed.
مثال 3:
DECLARE
c_id customers.id%type := 1;
c_sal customers.salary%type;
BEGIN
SELECT salary
INTO c_sal
FROM customers
WHERE id = c_id;
IF (c_sal <= 2000) THEN
UPDATE customers
SET salary = salary + 1000
WHERE id = c_id;
dbms_output.put_line (‘Salary updated’);
END IF;
END;
/
خروجی:
Salary updated
PL/SQL procedure successfully completed.
دستور شرطی IF – THEN – ELSE
سینتکس این دستور شرطی به این شکل است:
IF condition THEN
Statement1;
ELSE
Statement2;
END IF;
در این سینتکس CONDITION شرط دستور و Statement1 و Statemenet2 بلاک دستورات هستند.
مثال 1:
DECLARE
a number(3) := 100;
BEGIN
— check the boolean condition using if statement
IF( a < 20 ) THEN
— if condition is true then print the following
dbms_output.put_line(‘a is less than 20 ‘ );
ELSE
dbms_output.put_line(‘a is not less than 20 ‘ );
END IF;
dbms_output.put_line(‘value of a is : ‘ || a);
END;
/
خروجی:
a is not less than 20
value of a is : 100
PL/SQL procedure successfully completed.
دستور شرطی IF – THEN – ELSIF
سینتکس این دستور شرطی به این شکل است:
IF(boolean_expression 1)THEN
Statement1;
ELSIF( boolean_expression 2) THEN
Statement2;
ELSIF( boolean_expression 3) THEN
Statement3;
ELSE
Sstatement4;
END IF;
نکته 1: اگر هرکدام از ELSIF ها بر قرار باشند مابقی ELSIFها بررسی نمی شوند.
نکته 2: در هر دستور شرطی IF – THEN می توان چندین ELSIF داشت ولی فقط می توان حداکثر یک عبارت ELSE داشت که بعد از تمامی ELSIF ها نوشته می شود.
مثال 1:
DECLARE
a number(3) := 100;
BEGIN
IF ( a = 10 ) THEN
dbms_output.put_line(‘Value of a is 10’ );
ELSIF ( a = 20 ) THEN
dbms_output.put_line(‘Value of a is 20’ );
ELSIF ( a = 30 ) THEN
dbms_output.put_line(‘Value of a is 30’ );
ELSE
dbms_output.put_line(‘None of the values is matching’);
END IF;
dbms_output.put_line(‘Exact value of a is: ‘|| a );
END;
/
خروجی:
None of the values is matching
Exact value of a is: 100
PL/SQL procedure successfully completed.
دستور شرطی CASE
سینتکس دستور شرطی CASE به این شکل است:
CASE selector
WHEN ‘value1’ THEN Statement1;
WHEN ‘value2’ THEN Statement2;
WHEN ‘value3’ THEN Statement3;
…
ELSE Statementn;
END CASE;
در این سینتکس selector انتخابگر دستور است که مقدار آن در عبارت های WHEN بررسی می شود و تا دستورات (statement) مناسب اجرا شود.
دیاگرام این دستور را در شکل زیر می بینید:
مثال 1:
DECLARE
grade char(1) := ‘A’;
BEGIN
CASE grade
when ‘A’ then dbms_output.put_line(‘Excellent’);
when ‘B’ then dbms_output.put_line(‘Very good’);
when ‘C’ then dbms_output.put_line(‘Well done’);
when ‘D’ then dbms_output.put_line(‘You passed’);
when ‘F’ then dbms_output.put_line(‘Better try again’);
else dbms_output.put_line(‘No such grade’);
END CASE;
END;
/
خروجی:
Excellent
PL/SQL procedure successfully completed.
دستور شرطی SEARCHED CASE
سینتکس دستور شرطی SEARCHED CASE به این شکل است:
CASE
WHEN selector = ‘value1’ THEN Statement1;
WHEN selector = ‘value2’ THEN Statement2;
WHEN selector = ‘value3’ THEN Statement3;
…
ELSE Statemenetn; — default case
END CASE;
همانطور که مشاهده می کنید شرط در عبارت WHEN تعیین می شود.
دیاگرام این دستور را در شکل زیر می بینید:
مثال:
DECLARE
grade char(1) := ‘B’;
BEGIN
case
when grade = ‘A’ then dbms_output.put_line(‘Excellent’);
when grade = ‘B’ then dbms_output.put_line(‘Very good’);
when grade = ‘C’ then dbms_output.put_line(‘Well done’);
when grade = ‘D’ then dbms_output.put_line(‘You passed’);
when grade = ‘F’ then dbms_output.put_line(‘Better try again’);
else dbms_output.put_line(‘No such grade’);
end case;
END;
/
خروجی:
Very good
PL/SQL procedure successfully completed.
IF – THEN – ELSE تودرتو
سینتکسIF – THEN – ELSE تودرتو به این شکل است:
IF (boolean_expression 1)THEN
IF(boolean_expression 2) THEN
sequence-of-statements;
END IF;
ELSE
else-statements;
END IF;
مثال:
DECLARE
a number(3) := 100;
b number(3) := 200;
BEGIN
— check the boolean condition
IF( a = 100 ) THEN
— if condition is true then check the following
IF( b = 200 ) THEN
— if condition is true then print the following
dbms_output.put_line(‘Value of a is 100 and b is 200’ );
END IF;
END IF;
dbms_output.put_line(‘Exact value of a is : ‘ || a );
dbms_output.put_line(‘Exact value of b is : ‘ || b );
END;
/
خروجی:
Value of a is 100 and b is 200
Exact value of a is : 100
Exact value of b is : 200
PL/SQL procedure successfully completed.