آموزش PL/SQL قسمت چهارم -دستورات شرطی

گاهی اوقات نیاز است یک یا چند شرط بررسی شوند تا عملیات برنامه بر اساس آن شرط ها انجام گیرند. در شکل زیر ساختار کلی دستورات شرطی را مشاهده می کنید این دستورات برای تغییر روند کنترلی اجرای دستورات برنامه استفاده می شود.

در جدول زیر دستورات شرطی 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.

 

 

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.