|
|
|
|
IF-THEN 文 |
|
IF sales > quota THEN
bonus := compute_bonus(empid);
UPDATE payroll SET pay = pay + bonus WHERE empno = emp_id;
END IF; |
|
IF-THEN-ELSE 文 |
|
IF trans_type = 'CR' THEN
UPDATE accounts SET balance = balance + credit WHERE ...
ELSE
UPDATE accounts SET balance = balance - debit WHERE ...
END IF; |
|
IF-THEN-ELSIF 文 |
|
IF sales > 50000 THEN
bonus := 1500;
ELSIF sales > 35000 THEN
bonus := 500;
ELSE
bonus := 100;
END IF; |
|
|
CASE 文 |
|
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('Good');
WHEN 'D' THEN dbms_output.put_line('Fair');
WHEN 'F' THEN dbms_output.put_line('Poor');
ELSE dbms_output.put_line('No such grade');
END CASE; |
|
反復制御: LOOP 文とEXIT 文 |
|
LOOP
...
IF credit_rating < 3 THEN
...
EXIT; -- exit loop immediately
END IF;
END LOOP; |
|
|
WHILE-LOOP |
|
WHILE total <= 25000 LOOP
...
SELECT sal INTO salary FROM emp WHERE ...
total := total + salary;
END LOOP; |
|
|
FOR-LOOP |
|
FOR i IN 1..3 LOOP -- assign the values 1,2,3 to i
sequence_of_statements -- executes three times
END LOOP;
一連の文は範囲中の整数1 つについて1 回実行されます。繰り返しが1 回起こるたびに、ループ・カウンタが1 つ増やされます。 |
|
|
GOTO 文 |
|
GOTO 文はラベルに無条件に分岐する場合に使用します。ラベルは有効範囲の中で他と重複しないもので、実行可能文かPL/SQL ブロックの前に置かれている必要があります。GOTO文が実行されると、ラベルが付けられた文またはブロックに制御が移ります。次の例では、一連の文の下の方にある実行可能文に制御が渡されています。
BEGIN
...
GOTO insert_row;
...
<<insert_row>>
INSERT INTO emp VALUES ...
END; |