SQL
Pada bab ini akan membahas
beberapa bagian dari SQL :
➢ SQL adalah bahasa deklaratif yang menangani baris data, sedangkan bahasa
tingkat tinggi seperti C adalah bahasa prosedural yang dapat menangani hanya satu
baris data pada suatu waktu.
➢ Ekstensi dikenal sebagai SQL / PSM (Persistent Stored Modules); Namun, untuk
membuat diskusi lebih konkret, kita mendasarkan presentasi terutama pada bahasa
pemrograman Oracle, PL / SQL.
Bahasa Pemrograman SQL
➢ PL / SQL (Prosedural Language / SQL) adalah ekstensi prosedural Oracle
untuk SQL. Ada dua versi dari PL / SQL: satu adalah bagian dari server
Oracle, dan yang lainnya adalah mesin yang terpisah tertanam dalam
sejumlah alat Oracle.
➢ Mereka sangat mirip satu sama lain dan memiliki konstruksi yang sama
pemrograman, sintaks, dan mekanisme logika, meskipun PL / SQL alat bantu
Oracle memiliki beberapa ekstensi untuk memenuhi persyaratan dari alat
tertentu (misalnya, PL / SQL memiliki ekstensi untuk Formulir Oracle ).
Blok PL / SQL memiliki hingga tiga bagian:
Misalnya, untuk menyatakan bahwa variabel vStaffNo adalah tipe yang sama
seperti kolom staffNo dari tabel Staf, kita bisa menulis:
vStaffNo Staff.staffNo%TYPE;
vStaffNo1 vStaffNo%TYPE;
Deklarasi
Contoh tersebut mendeklarasikan variabel dari jenis yang sama sebagai
kolom dalam tabel yang ditentukan atau variabel lain menggunakan
atribut% TYPE.
Misalnya, untuk mendeklarasikan variabel vStaffRec menjadi baris dari
tabel Staff :
vStaffRec Staf% ROWTYPE;
Contoh diatas merupakan mendeklarasikan variabel untuk menjadi
jenis yang sama seperti seluruh baris tabel atau melihat menggunakan
atribut% ROWTYPE.
Penugasan
Dibagian executable dari PL/SQL, variable dapat ditetapkan
dengan dua cara :
o Menggunakan pernyataan penugasan normal (:=)
o Sebagai hasil dari pernyataan SQL SELECT atau FETCH.
Sebagai contoh :
vStaffNo := ‘SG14’;
vRent := 500;
SELECT COUNT(*) INTO x FROM PropertyForRent WHERE staffNo =
vStaffNo;
Penugasan
Dalam kasus ketiga, variable x diatur ke hasil pernyataan
SELECT (dalam hal ini, sma dengan jumlah property yang
dikelola oleh anggota staf SG14).
Perhatikan bahwa dalam standar SQL, tugas menggunakan
kata kunci SET pada awal baris dengan symbol “=“. Bukan “:=“.
Sebagai contoh :
SET vStaffNo 5 ‘SG14’
Pernyataan Kontrol
✓ Pernyataan IF Bersyarat
Seperti contoh :
IF (position = ‘Manager’) THEN
salary := salary*1.05;
ELSE
salary := salary*1.03;
END IF;
Pernyataan Kontrol
✓ Pernyataan Kasus Bersyarat
Pernyataan Kontrol
✓ Pernyataan Iterasi (LOOP) Seperti contoh :
x:=1;
myLoop:
LOOP
x := x + 1;
IF (x > 3) THEN
EXIT myLoop; --- exit loop immediately
END LOOP myLoop;
--- control resumes here
y := 2;
Pernyataan Kontrol
✓ Pernyataan Iterasi (FOR)
DECLARE
vpCount NUMBER;
vStaffNo BEGIN
PropertyForrent.staffNo%TYPE:=’SG14’; SELECT COUNT(*) INTO vpCount
-- mendefinisikan pengecualian ac untuk
kendala perusahaan yang mencegah anggota staf FROM PropertyForRent
-- mengelola lebih dari 100 properti
WHERE staffNo = vStaffNo;
e_too_many_properties EXCEPTION;
PRAGMA IF vpCount = 100
EXCEPTION_INIT(e_too_many_properties, -
20000); -- mengajukan pengecualian untuk kendala
umum
EXCEPTION RAISE e_too_many_properties;
menangani pengecualian untuk kendala umum
END IF;
WHEN e_too_many_properties THEN
dbms_output.put_line(‘Member of staff’ || UPDATE PropertyForRent SET staffNo =
staffNp || ‘already managing 100 properties’); vStaffNo WHERE propertyNo = ‘PG4’;
END;
Contoh penanganan
pengecualian dalam PL / SQL
Jika tipe handler EXIT, maka setelah menjalankan aksi handler, handler
meninggalkan pernyataan majemuk. Jika tipe handler adalah UNDO, maka
handler memutar kembali semua perubahan yang dibuat dalam pernyataan
gabungan, mengeksekusi aksi handler yang terkait, dan kemudian
mengembalikan kontrol ke pernyataan gabungan.
Pengertian Kursor
Cursor dapat diartikan sebagai suatu variabel yang
digunakan untuk menampung hasil query satu
baris/record atau lebih, di mana ia juga menjadi
penampung sekaligus pointer atas hasil eksekusi query.
Nilai-nilai yang disimpan dalam sebuah kursor
kemudian dapat dimanipulasi sehingga dapat digunakan
sesuai kebutuhan
KURSOR DI PL/SQL
1. Kursor Implisit (Implicit Cursor)
2. Open
Tahapan ini digunakan untuk membuka atau mengaktifkan sebuah cursor.
Sintaknya adalah:
OPEN cursor_name;
CLOSE cursor_name;
Contoh
Penggunaan
Kursor
UPDATE dengan CURSOR
Salah satu kemampuan cursor yaitu cursor dapat menunjuk
sekaligus mengUpdate banyak data di dalam database
Untuk melakukan proses update membutuhkan keyword UPDATE dan
keyword WHERE CURRENT OF.
Keyword Update, digunakan untuk mendefinisikan apa tujuan
dari cursor tersebut dibuat, sedangkan WHERE CURRENT OF digunakan
untuk menunjukan data yang mana yang ingin di UPDATE.
NB: keyword UPDATE disini bukan hanya sebatas untuk merubah data
menjadi data yang baru, tetapi juga termasuk UPDATE untuk
menghilangkan atau menghapus data.
Contoh update menggunakan kursor
DECLARE
CURSOR emp_cursor IS
SELECT employee_id FROM emp Sebelum diupdate
WHERE department_id = 20
FOR UPDATE OF Salary;
empId employees.employee_id%TYPE;
BEGIN
FOR emp_upd IN emp_cursor
LOOP Setelah diupdate
UPDATE emp
SET salary = 5000
WHERE CURRENT OF emp_cursor;
END LOOP;
COMMIT;
END;
Subprogram, Penyimpanan,
Prosedur, Fungsi, dan Paket
❖ Subprogram
(bagian-bagian program)
Prosedur
Merupakan penerapan konsep program modular, Fungsi
yaitu memecah-mecah program yang rumit Yaitu sebuah kumpulan statement
menjadi program-program bagian yang lebih yang akan mengembalikan sebuah
sederhana dalam bentuk prosedur-prosedur. nilai balik pada pemanggilnya.
Untuk hal-hal yang sering dilakukan berulang- Nilai yang dihasilkan Function
ulang, cukup dituliskan sekali saja dalam prosedur harus ditampung kedalam sebuah
dan dapat dipanggil atau dipergunakan sewaktu- variabel.
waktu bila diperlukan.
❖ Perbedaan Prosedur & Fungsi
Fungsi
Prosedur • Fungsi tersimpan
• Prosedur tersimpan tidak menghasilkan nilai ketika
menghasilkan nilai ketika dipanggil dan tentu saja
dipanggil. seperti fungsi biasa bisa
dipanggil di dalam suatu
• Prosedur dan fungsi yang pernyataan.
tersimpan dikenal dengan
sebutan routine. • Nilai yang dihasilkan oleh
fungsi tersimpan biasa disebut
nilai balik (return value).
❖ Persamaan Prosedur & Fungsi
Tiga trigger yang ditunjukkan pada gambar dieksekusi setiap kali kolom
staffNo di tabel Staf diperbarui. Sebelum penentuan trigger, nomor urut
updateSequence dibuat, bersama dengan updateSeq variable publik (yang
dapat diakses ke tiga trigger melalui paket seqPackage).
Selain itu, tabel PropertyForRent dimodifikasi untuk menambahkan kolom
yang disebut updateId, yang digunakan untuk menandai apakah suatu baris
telah diperbarui, untuk mencegahnya diperbarui lebih lama dari satu kali
selama operasi berjalan.
Trigger 2 (Cascade_StaffNo_Update1)
Trigger ini (statement-level) dijalankan sebelum update ke kolom staffNo di tabel Staf untuk mengatur
nomor urut baru untuk update.
Trigger 3 (Cascade_StaffNo_Update2)
Trigger ini (statement-level) dijalankan untuk memperbarui semua baris di tabel PropertyForRent yang
memiliki nilai staffNo lama (:old.staffNo) ke nilai baru (:new.staffNo), dan untuk menandai baris yang
telah diperbarui.
Trigger 4 (Cascade_StaffN0_Update3)
Trigger akhir (statement-level) akan dijalankan setelah update untuk mengatur ulang baris yang ditandai
kembali untuk tanpa tanda.
Penghapusan Trigger
Trigger dapat dihapus dengan menggunakan statement DROP TRIGGER <Trigger Name> .
Privilege TRIGGER
Untuk membuat trigger pada tabel, pengguna harus menjadi pemilik tabel (dalam hal ini pengguna akan
mewarisi privilege TRIGGER) atau yang harus dimiliki oleh pengguna setelah diberikan privilege TRIGGER
pada tabel.
Kelebihan dan Kekurangan Trigger
Ada sejumlah kelebihan dan kekurangan Trigger pada trigger basis data. Kelebihan trigger termasuk :
– Penghapusan kode yang berlebihan (redundant). Alih-alih menempatkan salinan fungsionalitas
trigger di setiap aplikasi klien yang membutuhkannya, trigger disimpan hanya sekali dalam basis data.
– Modifikasi yang disederhakan. Mengubah trigger memerlukan mengubahnya di satu tempat saja;
semua aplikasi secara otomatis menggunakan trigger yang diperbarui. Jadi, mereka hanya diberi kode
sekali, diuji satu kali, dan kemudian diberlakukan secara terpusat untuk semua aplikasi yang
mengakses basis data. Trigger biasanya dikendalikan, atau setidaknya diaudit, oleh DBA terampil.
Hasilnya bahwa trigger dapat diimplementasikan secara efisien.
– Keamanan meningkat. Menyimpan trigger dalam database memberi mereka semua manfaat
keamanan yang disediakan secara otomatis oleh DBMS.
– Integritas meningkat. Trigger bisa sangat berguna untuk mengimplementasikan beberapa jenis
kendala integritas, seperti yang telah kami tunjukkan sebelumnya. Menyimpan trigger seperti itu di
database berarti bahwa kendala integritas dapat ditegakkan secara konsisten oleh DBMS di semua
aplkasi.
– Peningkatan daya pemrosesan. Trigger menambahkan kekuatan pemrosesan ke DBMS dan ke
database secara keseluruhan.
– Sangat cocok dengan arsitektur client-server. Aktivasi pusat dan pemrosesan trigger cocok dengan
arsitektur client-server dengan baik. Satu permintaan dari klien dapat menghasilkan kineja otomatis
dari seluruh urutan pemeriksaan dan operasi selanjutnya oleh server database. Dengan cara ini,
kinerja berpotensi ditingkatkan karena data dan operasi tidak ditransfer di seluruh jaringan antara
klien dan server.
Kelebihan dan Kekurangan Trigger
Trigger juga memiliki kekurangan, yaitu:
- Overhead Kinerja. Manajemen dan pelaksanaan trigger memiliki kinerja
overhead yang harus diseimbangkan dengan keuntungan yang
disebutkan sebelumnya.
- Efek cascading. Tindakan satu trigger dapat menyebabkan trigger lain
untuk dihapus, dan seterusnya, dengan cara mengalir. Ini tidak hanya
dapat menyebabkan perubahan signifikan pada database, tetapi juga
bisa sulit untuk memperkirakan efek ketika merancang trigger.
- Tidak bisa dijadwalkan. Trigger tidak bisa dijadwalkan; mereka terjadi
ketika peristiwa itu didasarkan pada apa yang terjadi.
- Kurang portable. Meskipun sekarang dicakup oleh standar SQL,
kebanyakan DBMS menerapkan dialek mereka sendiri untuk trigger,
yang memengaruhi portabilitas.
Pengulangan (Recursion)
Pernyataan SELECT dapat digunakan jika kueri mengembalikan satu dan hanya satu
baris. Untuk menangani kueri yang dapat mengembalikan jumlah baris sewenang-
wenang (yaitu, nol, satu, atau lebih baris), SQL menggunakan kursor untuk
memungkinkan baris hasil kueri diakses satu per satu. Akibatnya, kursor bertindak
sebagai penunjuk ke baris tertentu dari hasil permintaan. Kursor dapat dimajukan
satu untuk mengakses baris berikutnya. Kursor harus dinyatakan dan dibuka sebelum
dapat digunakan, dan harus ditutup untuk menonaktifkannya setelah tidak lagi
diperlukan. Setelah kursor dibuka, baris hasil kueri dapat diambil satu per satu
menggunakan pernyataan FETCH, yang bertentangan dengan pernyataan SELECT.
RINGKASAN BAB
Trigger mendefinisikan tindakan yang harus diambil oleh database ketika
beberapa peristiwa terjadi dalam aplikasi. Trigger dapat digunakan untuk
menegakkan beberapa batasan integritas referensial, untuk menegakkan batasan
integritas yang kompleks, atau untuk mengaudit perubahan data. Trigger
didasarkan pada model Event-Condition-Action (ECA): peristiwa (atau peristiwa)
yang memicu aturan, kondisi yang menentukan apakah tindakan harus dieksekusi,
dan tindakan yang harus diambil.
Subprogram diberi nama blok PL / SQL yang dapat mengambil parameter dan
dipanggil. PL / SQL memiliki dua jenis subprogram yang disebut (tersimpan)
prosedur dan fungsi. Prosedur dan fungsi dapat mengambil satu set parameter
yang diberikan kepadanya oleh program panggilan dan melakukan serangkaian
tindakan. Keduanya dapat memodifikasi dan mengembalikan data yang
diteruskan kepada mereka sebagai parameter. Perbedaan antara prosedur dan
fungsi adalah bahwa fungsi akan selalu mengembalikan nilai tunggal ke
pemanggil, sedangkan prosedur tidak. Biasanya, prosedur digunakan kecuali
hanya satu nilai kembali yang diperlukan.
RINGKASAN BAB