PL / SQLフロー制御ステートメント

PL / SQLフロー制御ステートメント

このブログでは、次の3つのタイプを含むPL / SQLフロー制御ステートメントを紹介します
。制御ステートメント:IFステートメント
ループステートメント:LOOPステートメント、EXITステートメント
シーケンスステートメント:GOTOステートメント、NULLステートメント

条件文

(1)文法

① 
IF<布尔表达式 > THEN
	PL/SQL和 SQL 语句
END IF;
②
IF<布尔表达式 > THEN
	PL/SQL和 SQL 语句
ELSE
	其它语句
END IF;
③
IF<布尔表达式 > THEN
	PL/SQL和 SQL 语句
ELSIF
< 其它布尔表达式 > THEN
其它语句
ELSIF< 其它布尔表达式 > THEN
	其它语句
ELSE
	其它语句
END IF;
注意:ELSIF别写错

(2)ケースは次のとおりです。

DECLARE
	v_empno emp.empno%TYPE;
	V_salary emp.sal%TYPE;
	V_comment VARCHAR2(35);
BEGIN
	SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;
	IF v_salary<1500 THEN
		V_comment:= ‘ Fairly less’;
	ELSIF v_salary <3000 THEN
		V_comment:= ‘A little more’;
	ELSE
		V_comment:= ‘Lots of salary’;
	END IF;
	DBMS_OUTPUT.PUT_LINE(V_comment);
END;

2つのケース式

(1)文法

CASE selector
	WHEN expression1 THEN result1
	WHEN expression2 TH EN result2
	WHEN expressionN THEN resultN
	[ ELSE resultN+1]
END

(2)ケース

DECLARE
	V_grade char(1)
	V_appraisal VARCHAR2(20);
BEGIN
	V_appraisal :=
	CASE v_grade
		WHEN ‘A’ THEN ‘Excellent’
		WHEN ‘B’ THEN ‘Very Good’
		WHEN ‘C’ THEN ‘Good’
		ELSE ‘No suc h grade’
	END;
	DBMS_OUTPUT.PUT_LINE(‘Grade:||v_grade||’ Appraisal:|| 				   							v_appraisal);
END;

3サイクル

(1)単純なループ、
exitを使用してループを終了できます

LOOP
	要执行的语句
	EXIT WHEN <条件语句>;/*条件满足,退出循环语句*/
END LOOP;

ケースは次のとおりです。

DECLARE
	int NUMBER(2) :=0;
BEGIN
	LOOP
		int := int + 1;
		DBMS_OUTPUT.PUT_LINE('int 的当前值为 :'||int);
		EXIT WHEN int =10;
	END LOOP;
END;

(2)whileループ
構文:

WHILE<布尔表达式 > LOOP
	要执行的语句
END LOOP;

場合:

DECLARE
	x NUMBER :=1;
BEGIN
	WHILE x<=10 LOOP
		DBMS_OUTPUT.PUT_LINE('X 的当前值为 x);
		x:= x+1;
	END LOOP;
END;

(3)デジタルループ
構文:
各ループ、ループ変数は自動的に1ずつ増加します。キーワードREVERSEを使用すると、ループ変数は自動的に1ずつ減少します。IN REVERSEに続く数値は昇順である必要があり、変数や式ではなく整数である必要があります。EXITを使用してループを終了できます。

FOR 循环计数器 IN [REVERSE ] 下限 .. 上限 LOOP
	要执行的语句
END LOOP;

場合:

BEGIN
	FOR int in 1..10 LOOP
		DBMS_ OUTPUT.PUT_LINE('int 的当前值为 : '||int);
	END LOOP;
END;

(4)ラベルとGOTOはループを終了します。
構文:

GOTO label;
. . . . .
<<label>>/*标号是用 括起来的标识符*/

ケーススタディ

DECLARE
	V_counter NUMBER := 1;
BEGIN
	LOOP
		DBMS_OUTPUT.PUT_LINE('V_counter 的当前值为 :'||V_counter);
		V_counter := v_counter + 1;
		IF v_counter > 10 THEN
			GOTO l_ENDofLOOP;--跳转标识
		END IF;
	END LOOP;
	<<l_ENDofLOOP>>
		DBMS_OUTPUT.PUT_LINE('V_counter 的当前值为 :'||V_counter);
END ;

(5)NULL文
PL / SQLプログラムでは、null文を使用して、何もする必要がないことの意味を説明できます。これは、プレースホルダと同等であり、特定の文を意味のあるものにし、プログラムの可読性を向上させることができます。

DECLARE
	. . .
BEGIN
	…
	IF v_num IS NULL THEN
		GOTO print1;
	END IF;<<print1>>
	NULL;--不需要处理任何数据。
END;

おすすめ

転載: blog.csdn.net/hcyxsh/article/details/114979323