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;