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.