11. Control Structures
Control
structures merupakan perluasan paling penting PL/SQL untuk SQL. Tidak hanya
PL/SQL mengijinkan kita untuk memanipulasi data Oracle, ia juga mengijinkan
kita untuk memproses data menggunakan perintah-perintah conditional, iterative,
dan sequential flow-of-control seperti IF-THEN-ELSE, CASE, FOR-LOOP,
WHILE-LOOP, EXIT-WHEN, dan GOTO. Secara bersama-sama, perintah-perintah ini
dapat menangani berbagai situasi permasalahan.
11.1 Conditional Control
Seringkali, penting untuk
melakukan aksi alternatif bergantung kepada kondisi permasalahannya. Perintah
IF-THEN-ELSE mengijinkan kita untuk memproses perintah secara kondisional.
Klausa IF mengecek kondisi; klausa THEN mendefinisikan apa yang akan dilakukan
jika kondisi benar (TRUE); klausa ELSE mendefinisikan apa yang akan dilakukan
jika kondisi salah (FALSE) atau null.
Pertimbangkan
program berikut ini, yang memproses transaksi bank. Sebelum mengijinkan kita
untuk menarik dana $500 dari rekening 3, program akan memastikan apakah
rekening tersebut memiliki dana yang cukup untuk ditarik. Jika dana cukup,
program akan men-debit rekening. Sebaliknya, jika tidak, program akan
mencatatnya ke dalam audit table.
DECLARE
acct_balance
NUMBER(11,2);
acct
CONSTANT NUMBER(4) := 3;
debit_amt CONSTANT NUMBER(5,2) :=
500.00;
BEGIN
SELECT
bal INTO acct_balance
FROM
accounts
WHERE
account_id = acct
FOR
UPDATE OF bal;
IF
acct_balance >= debit_amt THEN
UPDATE
accounts
SET
bal = bal - debit_amt
WHERE
account_id = acct;
ELSE
INSERT
INTO temp
VALUES(acct,
acct_balance, 'Insufficient funds');
--
insert account, current balance, and message
END
IF;
COMMIT;
END;
Untuk
memilih diantara beberapa nilai atau rangkaian aksi, kita dapat menggunakan
konstruksi CASE. Ekspresi CASE mengevaluasi kondisi dan menghasilkan nilai
untuk setiap kasus (case). Perintah case mengevaluasi kondisi dan melakukan
aksi (mungkin dapat berupa seluruh blok PL/SQL) untuk setiap kasus.
--
This CASE statement performs different actions based
--
on a set of conditional tests.
CASE
WHEN
shape = 'square' THEN area := side * side;
WHEN
shape = 'circle' THEN
BEGIN
area
:= pi * (radius * radius);
DBMS_OUTPUT.PUT_LINE('Value
is not exact because pi is irrational.');
END;
WHEN
shape = 'rectangle' THEN
area := length * width;
ELSE
BEGIN
DBMS_OUTPUT.PUT_LINE('No
formula to calculate area of a' ||shape);
RAISE
PROGRAM_ERROR;
END;
END
CASE;
Rangkaian
perintah yang menggunakan hasil-hasil query untuk memilih alternatif aksi
adalah umum di dalam aplikasi-aplikasi database. Rangkaian umum lainnya
menambahkan atau menghapus baris data hanya jika entry terkait ditemukan di
dalam table lain. Kita dapat mengikat rangkaian-rangkaian umum ini ke dalam
blok PL/SQL dengan menggunakan logika kondisional.
No comments:
Post a Comment