You are on page 1of 11

Praktikum Basis Data 2 .

PL/SQL Tessv Badrivah


EEPIS-ITS 2008
Bab 3
Berinteraksi dengan Oracle Server
Tujuan
Setelah menyelesaikan bab ini, siswa dapat :
Menulis perintah SELECT dalam blok PL/SQL
Menulis perintah DML dalam PL/SQL
Kontrol transaksi dalam PL/SQL
Tujuan secara umum
Mempelajari perintah standart SQL SELECT, INSERT, UPDATE, dan DELETE dalam blok
PL/SQL. Juga dipelajari kontrol transaksi dan menentukan hasil dari perintah DML pada blok
PL/SQL.
Perintah SQL dalam PL/SQL
Mengambil isi data dari table menggunakan perintah SELECT.
Membuat perubahan pada isi table dengan perintah DML.
Kontrol transaksi menggunakan perintah COMMIT, ROLLBACK, atau
SAVEPOINT.
Menentukan hasil perintah DML dengan atribut cursor secara implicit.
Perintah SQL dalam PL/SQL
Mengambil data dari table melalui perintah SELECT.
Cara penulisan :
Menampilkan data dengan menggunakan PL/SQL
Gunakan perintah SELECT untuk mengambil data dari table. Keterangan pada cara
penulisan :
selectlist berisi sedikitnya satu kolom pada table, atau tanda bintang (*) untuk semua
baris, juga bisa berisi ekspresi, Iungsi baris atau Iungsi group.
variablenameadalah variable scalar yang menerima nilai
recordname nama RECORD PL/SQL yang menerima nilai.
table nama table yang datanya diambil
condition terdiri dari nama kolom, ekspresi, konstanta, operator pembandingan,
termasuk variable PL/SQL dan konstanta.
Petunjuk Menampilkan data dengan menggunakan PL/SQL
Akhiri setiap perintah SQL dengan tanda titik koma (;).
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
Klausa INTO diperlukan pada saat mencantumkan perintah SQL pada program perintah
SELECT yang ditulis dalam program PL/SQL.
Klausa WHERE bersiIat optional dan dapat digunakan untuk menentukan variable input,
konstanta, literal atau ekspresi PL/SQL.
Menampilkan data dengan menggunakan PL/SQL
Pastikan untuk mencantumkan jumlah variable yang sama antara yang ditulis setelah
SELECT dan pada bagian yang ditulis setelah INTO. Pastikan tipe data yang digunakan
oleh variable tersebut compatible dengan tipe data dari kolom/Iield yang diambil.
Perintah SELECT pada PL/SQL
Membutuhkan klausa INTO
Queri harus mengembalikan satu nilai dan hanya satu nilai saja untuk tiap variable
Contoh:
Query hanya mengembalikan Satu Baris
Query hanya mengembalikan satu baris saja.
PL/SQL akan menangani error yang disebabkan oleh suatu kesalahan. Kesalahan ini bisa di-
trap dalam bagian exception pada blok dengan menggunakan NODATAFOUND jika data
tidak ditemukan dan TOOMANYROWS jika menerima lebih dari satu nilai pada SQL.
Menampilkan Data dalam PL/SQL
Berikut diberikan contoh program untuk menampilkan tanggal mulai bekerja pegawai (hire
date) dan gaji pegawai.
Contoh:
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
Catatan
Meskipun setelah klausa SELECT kita bisa menampilkan ekspresi,tapi variable BOOLEAN
tidak dapat dituliskan disini.
Menampilkan Data dalam PL/SQL
Berikut program untuk menjumlah gaji semua pegawai yang berada di departemen 60
Catatan
Kita tidak diperbolehkan mendeIinisikan varibel dengan menggunakan column~TYPE
untuk menerima hasil dari Iungsi sum atau count. Sebagai contoh, variable vsumsal diatas
tidak boleh dideklarasikan sebagai employees.salaryTYPE;
Aturan Penamaan
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
Aturan Penamaan
Nama dari kolom/Iield pada table tidak boleh sama dengan nama variable local yang
tercantum di klausa INTO maupun yang terlibat dalam kondisi yang ditulis pada klausa
WHERE. Seperti contoh berikut :
DECLARE
lastname VARCHAR2(25) : 'King';
BEGIN
DELETE FROM employees WHERE lastname lastname;
. . .
Manipulasi Data menggunakan PL/SQL
Untuk membuat perubahan data pada table, digunakan perintah DML sebagai berikut :
INSERT
UPDATE
DELETE
MERGE
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
Menyisipkan Data
Berikut contoh contoh program untuk menyisipkan data pegawai baru ke dalam table
EMPLOYEES.
Menyisipkan Data
Pada saat menyisipkan baris data ke dalam table yang dicantumkan pada blok PL/SQL, kita
bisa :
Menggunakan Iungsi SQL, semisal USER dan SYSDATE
Mengenerate primary key dengan menggunakan sequences
Menurunkan nilai dalam blok PL/SQL
Menambahkan kolom yang memiliki nilai deIault
Mengubah Data
Berikut contoh program untuk menambah gaji semua pegawai yang pekerjaannya adalah
stock clerks.
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
Mengubah Data
Pada klausa SET, bagian sebelah kiri selalu kolom/Iield pada table, sedangkanpada bagian
kanan dapat merupakan ekspresi yang terdiri kolom table, atau variable local PL/SQL Klausa
WHERE digunakan untuk menentukan baris yang harus diubah datanya, Jika tidak ada baris
yang dimodiIikasi, tidak ada error yang ditampilkan
Catatan: Penandaan pada program PL/SQL selalu menggunakan:, sedangkan penandaan
pada kolom SQL selalu menggunakan .
Recall that iI column names and identiIier names are identical in the WHERE clause, the
Oracle server looks to the database Iirst Ior the name.
Menghapus Data
Contoh berikut menghapus baris data pada departemen 10.
Menghapus Data
Jika klausa WHERE tidak digunakan pada UPDATE, maka semua baris data pada table akan
dihapus.
Menggabung (Merge) Baris
Menyisipkan atau mengubah baris data yang ada dalam table COPYEMP untuk dicocokkan
dengan data yang ada di table EMPLOYEES. Jika data yang ada di EMPLOYEES sudah ada
di COPYEMP, maka data di COPYEMP tinggal disesuaikan dengan isi data yang ada di
EMPLOYEES. Jika data yang ada di EMPLOYEES belum ada di COPYEMP, maka data
tersebut disisipkan sebagai data baru ke dalam table COPYEMP.
DECLARE
v_empno employees.employee_idTYPE : 100;
BEGIN
MERGE INTO copy_emp c
USING employees e
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
ON (e.employee_id v_empno)
WHEN MATCHED THEN
UPDATE SET
c.first_name e.first_name,
c.last_name e.last_name,
c.email e.email,
. . .
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
. . .,e.department_id);
END;
Menggabung (Merge) Baris
Berikut contoh yang lain penggunaan MERGE untuk menggabung baris :
DECLARE
vempno EMPLOYEES.EMPLOYEEIDTYPE : 100;
BEGIN
MERGE INTO copyemp c
USING employees e
ON (e.employeeid vempno)
WHEN MATCHED THEN
UPDATE SET
c.Iirstname e.Iirstname,
c.lastname e.lastname,
c.email e.email,
c.phonenumber e.phonenumber,
c.hiredate e.hiredate,
c.jobid e.jobid,
c.salary e.salary,
c.commissionpct e.commissionpct,
c.managerid e.managerid,
c.departmentid e.departmentid
WHEN NOT MATCHED THEN
INSERT VALUES(e.employeeid, e.Iirstname, e.lastname,
e.email, e.phonenumber, e.hiredate, e.jobid,
e.salary, e.commissionpct, e.managerid,
e.departmentid);
END;
/
Catatan
Jika terdapat kesalahan pada program PL/SQL, bukan berarti perintah DML dan perintah lain
pada program tidak dijalankan, bagian lain yang tidak error, dapat dijalankan dengan sukses.
Aturan Penamaan
Menggunakan aturan penamaan akan menghindari ambiguitas pada klausa WHERE.
Kolom table dan nama variable harus memiliki nama yang unik tidak boleh sama.
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
Untuk menghindari ambiguitas, misal variable local diawali dengan v, semisal :
DECLARE
vlastname VARCHAR2(25);
Catatan: Tidak mungkin terjadi ambiguitas pada klausa INTO , ini dikarenakan yang terlibat
pada klausa INTO pasti variable PL/SQL, dan bukan nama Iield dari teabel.
SQL Cursor
SQL Cursor adalah cursor yang menunjuk pada area sebagai hasil dari proses
menjalankan perintah SQL.
Ada dua tipe cursors:
Implicit cursors
Explicit cursors
Oracle server menggunakan implicit cursors untuk melakukan parsing dan
menjalankan perintah SQL
Explicit cursors adalah cursor yang secara eksplisit kita buat sendiri.
SQL Cursor
Pada saat kita memberikan perintah SQL, Oracle server akan membuka area di memori
dimana perintah tersebut diparsing dan dijalankan. Area tersebut dinamakan cursor.
Pada saat bagian yang bisa dijalankan dari suatu blok menjalankan perintah SQL, PL/SQL
akan membuat implicit cursor, dimana akan di-manage oleh PL/SQL secara otomatis.
Sedangkan explicit cursor dideklarasikan, dan dibuat sendiri oleh programmer.
Atribut SQL Cursor
Terdapat empat buah atribut dalam PL/SQL yang dapat digunakan pada cursor. Dengan
mengunakan atribut cursor kita bisa menguji hasil dari perintah SQL :
Atribut SQL Cursor
Atribut cursor memungkinkan kita untuk mengevaluasi hasil dari suatu perintah SQL.
Kita bisa menggunakan atribut SQLROWCOUNT, SQLFOUND, SQLNOTFOUND,
dan SQLISOPEN pada bagian exception dari suatu blok. PL/SQL tidak akan
menampilkan suatu kesalahan jika perintah DML tidak memberikan hasil apa-apa. Tetapi
bisa kita perikda dengan menggunakan atribut cursor.
Catatan :
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
SQLISOPEN hanya bersiIat melengkapi saja dari empat atribut implicit cursor; sebenarnya
atribut ini digunakan pada explicit cursors. Atribut cursor seperti NOTFOUND berguna
untuk mengevaluasi perintah update atau delete jika tidak ada baris data yang diubah.
Selain itu, SQL cursor memiliki atribut lain yaitu BULKROWCOUNT, yang digunakan
bersama-sama dengan perintah FORALL tapi tidak dijelaskan pada Dasar PL/SQL. Coba
anda cari sendiri penggunaannya lewat internet. Atribut ini memiliki semantic dari index-by
table. Elemen ke-i menyimpan jumlah baris yang diproses oleh eksekusi yang ke-i dari
perintah UPDATE atau DELETE. Jika eksekusi yang ke-i tidak menghasilkan baris data
apapun, maka BULKROWCOUNT(i) mengembalikan nilai nol (zero).

Atribut SQL Cursor
Program berikut akan menghapus baris data pada table EMPLOYEES untuk pegawai yang
memiliki nomer pegawai 176. Jumlah dari baris data yang berhasil dihapus dimasukkan ke
dalam table rowsdeleted.
Perintah Kontrol Transaksi
Penggunaan kontrol transaksi COMMIT atau ROLLBACK
Kita bisa mengatur alur logika dari transaksi dengan perintah COMMIT and
ROLLBACK SQL, membuat perubahan pada perintah DML menjadi permanen, atau
sebaliknya membatalkannya.
Sedangkan untuk menandai suatu transaksi digunakan perintah SAVEPOINT.
Contoh perintah :
COMMIT;
SAVEPOINT savepointname;
ROLLBACK;
ROLLBACK TO |SAVEPOINT| savepointname;
Ringkasan
Pada bab ini kita mempelajari bagaimana cara :
Mencantumkan perintah SQL pada blok PL/SQL menggunakan SELECT, INSERT,
UPDATE, DELETE, dan MERGE
Menggunakan kontrol transaksi COMMIT, ROLLBACK, dan SAVEPOINT pada
blok PL/SQL
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
Ringkasan
Pada bab ini kita mempelajari :
Ada dua tipe cursor: implicit dan explicit.
Atribut dari Implicit cursor digunakan untuk melakukan veriIikasi pada perintah
DML:
SQLROWCOUNT
SQLFOUND
SQLNOTFOUND
SQLISOPEN
Sedangkan Explicit cursors dibuat oleh programmer
Ringkasan
Implicit cursor dideklarasikan oleh PL/SQL untuk setiap perintah DML yang dijalankan.
Setiapimplicit cursor memiliki empat atribut yaitu: FOUND, ISOPEN, NOTFOUND,
dan ROWCOUNT. Atribut cursor dapat kita gunakan pada perintah procedural tapi tidak
pada perintah SQL. Sedangkan explicit cursors dibuat oleh programmer.
Topik Latihan Bab 3
Topik dari Latihan bab ini meliputi pembuatan blok PL/SQL untuk :
Menampilkan data dari table
Menyisipkan data baru
Mengubah data yang sudah ada
Menghapus data pada tabel
Latihan Bab 3
1. Buat blok PL/SQL yang dapat menampilkan nomer departemen yang paling besar
pada table DEPARTMENTS kemudian simpan ke dalam variable iSQL*Plus. Cetak
hasilnya pada layar. Simpan blok PL/SQL tersebut pada Iile dengan nama p3q1.sql.
dengan mengklik tombol Save Script.
2. ModiIikasi blok PL/SQL yang anda buat pada nomer 1 untuk memasukkan
departemen baru ke dalam table DEPARTMENTS. Simpan blok PL/SQL yang dibuat
dengan nama p3q2.sql dengan mengklik tombol Save Script.
a. Gunakan perintah DEFINE untuk nama department. Beri nilai pada departemen
yang baru ini Education`.
b. Lewatkan nilainya pada blok PL/SQL melalui variable substitusi iSQL*Plus.
Untuk departemen yang baru ini beri nomer departemen yang sama dengan
nomer departemen paling besar (pada no.1) ditambah dengan 10.
c. Isi Iield nomer lokasi dengan NULL
d. Jalankan blok PL/SQL.
e. Tampilkan data departemen baru di layar.
3. Buat blok PL/SQL yang mengupdate Iield location ID untuk departemen baru yang
dibuat pada nomer 2. Simpan blok PL/SQL dengan nama p3q3.sql dengan mengklik
tombol Save Script.
a. Gunakan variable iSQL*Plus untuk Iield nomer department ID yang ada pada
latihan sebelumnya
b. Gunakan perintah DEFINE untuk location ID. Beri nama lokasi yang baru
dengan ID 1700.
DEFINE pdeptno 280
DEFINE ploc 1700
Praktikum Basis Data 2 . PL/SQL Tessv Badrivah
EEPIS-ITS 2008
c. Lewatkan nilainya ke blok PL/SQL melalui variable substitusi iSQL*Plus.
d. Tampilkan data departemen yang baru anda ubah isinya
4. Buat blok PL/SQL yang menghpus data departemen yang anda buat pada nomer 2.
Simpan blok PL/SQL dengan nama p3q4.sql. dengan mengklik tombol Save Script.
a. Gunakan perintah DEFINE untuk department ID.
DEFINE pdeptno280
b. Lewatkan nilainya ke blok PL/SQL melalui variabel substitusi iSQL*Plus.
c. Tampilkan pesan bahwa data departemen sudah dihapus.

You might also like