Wednesday, 27 November 2013

78. Control Structures pada PL-SQL

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