Docstoc

Modul SBD

Document Sample
Modul SBD Powered By Docstoc
					                                                MODUL PRAKTIKUM




                                                  IF – 319P
                                      PENGANTAR BASIS DATA



                               Herastia Maharani, ST




                       2006 © All rights reserved.
    Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh material
dalam dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa
                                                       DAFTAR ISI

   Praktikum 1....................................................................................... 3
   Praktikum 2....................................................................................... 9
   Praktikum 3..................................................................................... 16
   Praktikum 4..................................................................................... 21
   Praktikum 5..................................................................................... 27
   Praktikum 6..................................................................................... 31
   Praktikum 7..................................................................................... 37
   Praktikum 8..................................................................................... 46




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   2
                                                       Praktikum 1

                                 Pengenalan Oracle SQL Plus

   A. Memulai SQL Plus dengan mengaktifkan dari menu
         Start              All Programs                        Oracle – OraHome90                                   Application
         Development                    SQL Plus




         -     Login dengan user name scott dan password tiger
         -     Host string umumnya diisi dengan nama server database
         -     Bila koneksi berhasil akan muncul pesan sbb:


               Connected to:
               Oracle9i Enterprise Edition Release 9.0.1.1.1 - Production
               With the Partitioning option
               JServer Release 9.0.1.1.1 - Production
               SQL>


         -     Untuk keluar dari SQL Plus gunakan perintah exit
               SQL> exit


   B. Menjalankan instruksi SQL Plus
         Untuk menjalankan perintah SQL digunakan tanda semi-kolom ( ; ) di
         akhir baris, atau dengan tanda / pada baris berikutnya
         Contoh :
               SQL> select * from dept;
               SQL> select * from dept




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   3
                  2     /
         SQL Plus memiliki beberapa fungsi dasar sbb :

                  Fungsi SQL Plus                                                      Deskripsi

           APPEND                                       Menyambung teks pada akhir baris
           CHANGE                                       Mengganti teks dalam suatu baris
           CLEAR                                        Menghapus isi buffer
           DEL                                          Menghapus baris aktual
           DESC                                         Menampilkan definisi tabel
           GET                                          Mengisi buffer dengan membaca isi file
           HOST                                         Eksekusi instruksi Host (OS)
           INPUT                                        Memasukkan baris ke dalam buffer
           LIST                                         Melihat isi buffer
           RUN                                          Eksekusi instruksi yang ada di buffer
           SAVE                                         Menyimpan isi buffer ke file
           SPOOL                                        Sesi layar disimpan ke file


   C. Deskripsi Tabel (Struktur Data)
         Jika kita ingin mengetahui tabel apa saja yang sudah ada dalam database,
         digunakan instruksi berikut :




         Struktur data dari sebuah tabel dapat dilihat dengan instruksi ‘DESC’, sbb:




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   4
   D. Editing Instruksi
         -     Menampilkan isi buffer, menggunakan instruksi LIST
               Contoh :
               SQL> select dname, loc
                   2      from depo
                   3      where deptno=10 or deptno=20
               /
               SQL>list
                   1     select dname, loc
                   2     from depo
                   3* where deptno=10 or deptno=20


               Instruksi LIST memiliki beberapa parameter sbb:
               List Last                : menampilkan baris terakhir
               List n                   : menampilkan baris ke-n
               List *                   : menampilkan baris aktual
               List a1 a2               : menampilkan baris ke a1 s/d a2


         -     Memperbaiki kesalahan script
               SQL > 2 from dept
               SQL > L
                   1      select dname, loc
                   2      from dept
                   3* where deptno=10 or deptno=20
               SQL> run


         -     Menghapus baris, menggunakan instruksi del (memiliki parameter
               yang sama dengan perintah list)
               Contoh :
               SQL > del last                       //menghapus baris terakhir
               SQL > del 2 4                        //menghapus baris ke 2 s/d 4


         -     Menambah teks pada akhir baris instruksi, menggunakan perintah
               append
               Contoh :
               SQL > append_ _or deptno=30




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   5
               Tanda _ _ menunjukkan bahwa harus diberikan dua spasi
               SQL > list
                     1     select dname, loc
                     2     from dept
                     3     where deptno=10 or deptno=20 or deptno=30
               SQL > run


         -     Mengganti teks pada instruksi, menggunakan perintah change
               Contoh :
               SQL > change /10/40
               3* where deptno = 30 or deptno = 40
               SQL >


         -     Editing dengan program EDITOR
               Peintah yang digunakan adalah EDIT
               SQL > edit
               Perintah ini akan langsung membuka editor yang digunakan (misalnya
               Notepad). Disini tidak diperlukan nama file karena hasil editing tidak
               akan disimpan ke disk melainkan dikembalikan ke buffer pada saat kita
               keluar dari editor (save&exit).


         -     Menyimpan isi buffer ke file
               Kita dapat menyimpan instruksi yang ada di buffer ke sebuah file
               dengan menggunakan perintah save. Jika kita tidak memberikan
               ekstensi          pada        nama          file,     maka         sistem         secara         otomatis           akan
               memberikan akhiran “.sql”
               SQL > list
               1         select * from dept
               2*        where deptno > 10


               SQL > save myfile.sql
               Created file myfile.sql
               SQL >




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   6
               Instruksi dalam file tersebut disebut sebagai SQL                                             script dan dapat
               dieksekusi langsung dengan perintah start sbb:


               SQL > clear buffer
               buffer cleared
               SQL > list
               No lines in SQL buffer
               SQL > start myfile.sql


               Pada        contoh         di     atas,       perintah          clear        buffer          digunakan            untuk
               mengosongkan buffer.
               Start dapat diganti dengan karakter ‘@’, sehingga contoh di atas
               dapat diganti menjadi :
               SQL > @ myfile.sql


         -     Mengisi buffer dengan file
               Untuk menaruh isi sebuah file ke dalam buffer digunakan perintah GET
               Contoh :
               SQL > clear buffer
               buffer cleared
               SQL > get myfile.sql
                  1        select * from dept
                  2*       where deptno > 10
               SQL > run


         -     Editing langsung ke file
               Untuk mengedit instruksi dalam sebuah file digunakan perintah sbb :


               SQL > edit myfile.sql


               Setelah proses editing selesai, isi file dapat ditransfer ke buffer dengan
               instruksi get, atau langsung dieksekusi dari SQL prompt.
               SQL > @ myfile.sql


         -     Menulis output ke file
               Untuk menyimpan output yang dihasilkan oleh instruksi SQL ke dalam
               sebuah file digunakan perintah SPOOL. Perintah ini memerlukan nama




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   7
               file sebagai parameternya. Direktori default untuk file hasil adalah
               C:\oracle\ora90\BIN


               Untuk mengakhiri efek SPOOL, gunakan instruksi SPOOL OFF
               SQL > SPOOL outfile
               SQL > select * from emp;
               SQL > SPOOL OFF
               Pada             contoh             di          atas,           output              disimpan                di         file
               C:\oracle\ora90\BIN\outfile.lst




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   8
                                                       Praktikum 2
         Data Definition Language & Integrity Constraint

   A. Membuat Tabel
         Sintaks untuk membuat sebuah tabel baru dalam sebuah tablespace di
         Oracle adalah sbb :


         CREATE TABLE namaTabel (
               <NamaField>              <TipeField>              <Batasan>
               ..                       ..                       ..
               ..                       ..                       ..
         );
         NamaField               nama atribut, berupa karakter dengan huruf besar/kecil dan
         dapat dipisahkan dengan ‘ _ ‘ (underscore).
         TipeField            tipe data SQL yang berlaku di Oracle
         Batasan (Constraint)                      batasan yang mengikat atribut antara lain Primary
         Key (PK), Foreign Key (FK), NOT NULL, CHECK, dsb.


         Contoh :
         Nama Tabel : Departemen
         Atribut :
         -     ID_Departemen (numerik)
         -     Nama_Departemen (20 karakter)
         -     ID_Manager (numerik)


         Nama Tabel : Pegawai
         Atribut :
         -     ID_pegawai (numerik)
         -     nama (50 karakter)
         -     jenis_kelamin (1 karakter)
         -     alamat (60 karakter)
         -     email (25 karakter)
         -     tanggal_masuk (tanggal)
         -     gaji (numerik)
         -     ID_departemen (numerik)




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   9
         Biasanya script di atas dibuat terlebih dulu dalam sebuah file *.sql,
         misalnya tabel.sql, baru kemudian dipanggil/dieksekusi dengan perintah
         start tabel.sql atau @tabel.sql. Hal ini dilakukan agar kita lebih mudah
         melakukan perubahan apabila terdapat kesalahan pada perintah SQL yang
         diberikan.
         Contoh file tabel.sql untuk kedua tabel di atas :


                 CREATE TABLE DEPARTEMEN (
                 ID_DEPARTEMEN NUMBER(4),
                 NAMA_DEPARTEMEN VARCHAR2(30),
                 ID_MANAGER NUMBER(6)
                 );


                 CREATE TABLE PEGAWAI(
                 ID_PEGAWAI NUMBER(6),
                 NAMA VARCHAR2(50),
                 JENIS_KELAMIN CHAR,
                 ALAMAT VARCHAR2(60),
                 EMAIL VARCHAR2(25),
                 TELEPON VARCHAR2(20),
                 TANGGAL_MASUK DATE,
                 GAJI NUMBER(8,2),
                 ID_DEPARTEMEN NUMBER(4)
           );




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   10
         Untuk melihat tabel yang telah dibuat, gunakan perintah sbb :


         SQL > select * from tab;


         Struktur data dari tabel yang kita buat dapat ditampilkan dengan instruksi
         describe (atau cukup desc saja)




   B. Menghapus Tabel
         Untuk menghapus tabel digunakan perintah DROP TABLE NamaTabel




   C. Integritas Data
         Integritas data adalah konsistensi dan kebenaran dari data yang disimpan.
         Sistem harus menjaga agar antara kehidupan nyata dan nilai dari data
         mempunyai arti yang sesuai. Misalnya, usia seseorang tidak boleh bernilai
         negatif.


         Beberapa jenis integritas data a.l integritas entitas, integritas domain,
         integritas referensial, serta integritas yang muncul melalui aturan yang
         didefinisikan sendiri (misalnya melalui trigger dan stored procedure).
         Untuk menyatakan integritas data ini digunakan batasan-batasan dalam
         implementasi sebuah basis data, terutama dalam membuat tabel dalam
         basis data.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   11
         Beberapa batasan (constraint) yang digunakan dalam implementasi a.l :
         •     PRIMARY KEY (PK)
               PK merupakan constraint yang menjaga integritas data, dimana
               sebuah PK tidak boleh memiliki duplikat dan otomatis tidak NULL. PK
               digunakan untuk mengidentifikasi sebuah baris di tabel. PK dapat
               dibuat langsung pada saat kreasi tabel dengan format sbb :
               create table NamaTable (
               <NamaField>                          <Tipe>                   constraint                       PK_NamaTabel
               PRIMARY KEY
               )
               Sebagai alternatif, PK juga dapat didefinisikan dengan instruksi sbb
               (misalkan yang menjadi PK adalah NamaField3):
               create table NamaTable (
               <NamaField1>                         <Tipe1>
               <NamaField2>                         <Tipe2>
               <NamaField3>                         <Tipe3>
               <NamaField4>                         <Tipe4>
               constraint PK_NamaTabel PRIMARY KEY (NamaField3)
               )


         •     NOT NULL
               Constraint NOT NULL diberikan jika sebuah kolom pada tabel tidak
               boleh kosong (harus diisi).


         •     UNIQUE
               Constraint UNIQUE digunakan untuk menjamin bahwa tidak ada nilai
               kolom yang terduplikasi. Pada Oracle, field UNIQUE dapat mempunyai
               nilai “NULL”.


         •     CHECK, digunakan untuk menjamin bahwa nilai kolom ada dalam
               ruang nilai tertentu.


         •     FOREIGN               KEY        (FK),       adalah          kolom         pada        sebuah          tabel        yang
               menunjukkan bahwa kolom tersebut adalah Primary Key pada tabel
               yang lain.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   12
               Format penulisan constraint FK adalah :


                           CONSTRAINT FK_NamaFK FOREIGN KEY (NamaFieldFK)
                           REFERENCES TabelFK (NamaFieldFK_di_TabelFK)


               Jika kolom FK memiliki nama yang sama dengan di tabel asalnya maka
               cukup dituliskan


                           CONSTRAINT FK_NamaFK FOREIGN KEY (NamaFieldFK)
                           REFERENCES TabelFK


         Contoh implementasi tabel dengan menerapkan batasan-batasan di atas
         adalah sbb:


               CREATE TABLE DEPARTEMEN (
               ID_DEPARTEMEN NUMBER(4),
               NAMA_DEPARTEMEN VARCHAR2(30) NOT NULL,
               ID_MANAGER NUMBER(6) NOT NULL
               constraint PK_DEPARTEMEN PRIMARY KEY (ID_DEPARTEMEN)
               );


               CREATE TABLE PEGAWAI(
               ID_PEGAWAI NUMBER(6) CONSTRAINT PK_PEGAWAI PRIMARY KEY,
               NAMA VARCHAR2(50) NOT NULL,
               JENIS_KELAMIN CHAR,
               ALAMAT VARCHAR2(60),
               EMAIL VARCHAR2(25) UNIQUE,
               TELEPON VARCHAR2(20),
               TANGGAL_MASUK DATE,
               GAJI NUMBER(8,2) CHECK (GAJI > 100),
               ID_DEPARTEMEN NUMBER(4),
               CONSTRAINT                      CK_JK               CHECK                (JENIS_KELAMIN=‘L’                            OR
               JENIS_KELAMIN=‘P’),
               CONSTRAINT                 FK_DEPARTEMEN                     FOREIGN            KEY        (ID_DEPARTEMEN)
               REFERENCES DEPARTEMEN ON DELETE CASCADE
               );




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   13
   D. Mengubah Definisi Tabel
         Kita       dapat        mengubah               definisi        tabel        yang        sudah         dibuat         dengan
         menggunakan perintah ALTER TABLE, dengan sintaks sbb :


               ALTER TABLE NamaTabel
                           ADD          (
                                         NamaField TipeField                             Batasan
                                         ..                      ..                      ..
                           );


               atau


               ALTER TABLE NamaTabel
                           MODIFY                   (
                                         NamaField TipeField                             Batasan
                                         ..                      ..                      ..
                           );
               atau


               ALTER TABLE NamaTabel
               DROP( NamaField) ;


         ADD digunakan untuk menambah kolom atau constraint baru, MODIFY
         digunakan untuk mengubah kolom yang sudah ada, sedangkan DROP
         digunakan untuk menghapus kolom atau constraint yang sudah ada.


         Contoh :
         -     Menambah kolom NO_KTP sebagai field yang UNIQUE




         -     Memodifikasi kolom ALAMAT supaya tidak boleh kosong




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   14
         -     Menghapus kolom NO_KTP




         -     Menghapus constraint PK_PEGAWAI




         -     Menambahkan constraint PK_PEGAWAI




         -




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   15
                                                       Praktikum 3
                                                  Manipulasi Data


   Manipulasi data dilakukan dengan menggunakan SQL_DML (Data Manipulation
   Language) yang terdiri atas :


         INSERT
         Untuk memasukkan record (baris/row) baru ke dalam tabel digunakan
         instruksi berikut:


         INSERT INTO NamaTabel (NamaKolom1, NamaKolom2, ..... ..)
         VALUES (nilai1, nilai2, .. .. ..)


         Pada perintah di atas, NamaKolom1 diberi nilai1, NamaKolom2 diberi
         nilai2, dst.
         Jika nama kolom tidak disebutkan, maka susunan ‘values’ harus sesuai
         dengan struktur data tabel.


         Dalam melakukan operasi INSERT, kita harus memperhatikan seluruh
         constraint yang ada pada tabel tersebut (NOT NULL, UNIQUE, dsb)


         Contoh :




         Nilai record juga dapat dimasukkan secara acak sbb :




         Catatan : supaya perubahan yang kita lakukan tetap tersimpan, kita
         harus melakukan commit setelah melakukan sebuah transaksi. Untuk




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   16
         mengatur agar Oracle melakukan commit secara otomatis digunakan
         perintah :


         SQL> set autocommit on
         UPDATE
         Setelah kita menyimpan record dalam tabel, kita dapat melakukan
         modifikasi/perubahan terhadap nilai record tersebut dengan perintah
         UPDATE sbb :


               UPDATE NamaTabel
               SET NamaKolom = <nilai>


         Dengan perintah di atas, maka seluruh record dalam tabel akan diubah.
         Jika kita hanya ingin mengubah nilai untuk record-record tertentu saja,
         digunakan klausa WHERE sbb :


               UPDATE NamaTabel
               SET NamaKolom = <nilai>
               WHERE <predikat>
         Pada instruksi di atas, predikat menunjukkan kualifikasi/syarat untuk
         record yang akan diubah.


         Contoh :
         -     Kenaikan gaji 10% untuk seluruh pegawai




         -     Perubahan manajer untuk departemen HRD




         DELETE
         Perintah DELETE digunakan untuk menghapus satu atau beberapa record
         dalam tabel.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   17
               DELETE FROM NamaTabel
               WHERE <predikat>


         Seperti pada instruksi UPDATE, predikat menentukan record mana yang
         akan dihapus. Jika klausa WHERE tidak digunakan, maka seluruh record
         yang ada pada tabel tersebut akan dihapus !
         Contoh :
         -     Menghapus pegawai yang tidak memiliki gaji




         SELECT
         Instruksi SELECT merupakan instruksi yang paling banyak digunakan
         dalam SQL. Instruksi ini digunakan untuk mencari data (Retrieval) dari
         tabel. SELECT memilih atribut/kolom tertentu dari satu atau beberapa
         tabel.
         Secara umum, instruksi SELECT memiliki format sbb :


               SELECT Atribut1, Atribut2, …
               FROM NamaTabel
               WHERE <predikat>


         Predikat menyatakan kualifikasi/kondisi dari record yang dicari. Jika
         sebuah record memenuhi syarat/kondisi yang diberikan dalam predikat,
         maka record tersebut akan dipilih.
         Bila klausa WHERE tidak diberikan, maka seluruh record dalam tabel akan
         dipilih.
         Secara umum, bentuk klausa WHERE adalah :


               WHERE Kolom <operator> <nilai>


   Beberapa operator yang berlaku dan biasa digunakan dalam klausa WHERE
   a.l :
   1. Operator aritmatika (=, <>, <, <=, >, >=)
   2. Operator logika : AND, OR dan NOT




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   18
         Operator AND dan OR digunakan untuk menggabungkan lebih dari satu
         kondisi, sedangkan operator NOT                                     digunakan untuk                    negasi. Dalam
         implementasinya, prioritas operator AND lebih tinggi dari OR sehingga
         AND akan dieksekusi terlebih dahulu.
   3. BETWEEN dan NOT BETWEEN
         Operator Between memberikan “range” untuk membatasi pencarian.
         Format query-nya adalah :
               SELECT Kolom1, Kolom2, …
                     FROM NamaTabel
                           WHERE Kolom BETWEEN <nilai1> AND <nilai2>
         Pada instruksi di atas, nilai1 menunjukkan batas nilai terendah dan nilai2
         menunjukkan batas nilai tertinggi.


   4. LIKE dan NOT LIKE
         Biasanya           LIKE         digunakan            untuk         query        yang        mencari           suatu        teks
         berdasarkan sebagian karakter dalam teks tersebut., bisa berdasarkan
         prefiks (karakter awal), sufiks (karakter akhir) maupun karakter di
         tengah-tengah teks.
               SELECT Kolom1, Kolom2, …
                     FROM NamaTabel
                           WHERE Kolom LIKE <nilai>


         Untuk merepresentasikan kata/karakter sembarang digunakan tanda “%”.
         Tanda “%”                ini dapat mewakili 0, 1 atau beberapa karakter (tidak
         terbatas). Untuk merepresentasikan tepat satu karakter saja, digunakan
         tanda “_” (garis bawah).


   5. IN dan NOT IN
         IN       digunakan             untuk         mencari           nilai      dari      sebuah           daftar/list          yang
         mengandung satu/lebih nilai di dalamnya.
               SELECT Kolom1, Kolom2, …
                     FROM NamaTabel
                           WHERE Kolom IN <nilai1, nilai2, nilai3, …>


   6. IS NULL dan IS NOT NULL
         Operator IS NULL digunakan untuk mencari kolom yang nilainya belum
         diisi.



Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   19
   CONTOH QUERY


   SQL> select nama, gaji
               from pegawai
               where gaji >= 1000


   SQL> select nama
               from pegawai
               where jenis_kelamin = ‘P’ AND id_departemen = 1


   SQL> select nama, id_departemen, gaji
               From pegawai
               Where gaji BETWEEN 500 AND 1300
               ORDER BY gaji DESC


   SQL> select nama, alamat
               from pegawai
               where LOWER(alamat) LIKE ‘da%’


   SQL> select nama, alamat
               from pegawai
               where UPPER(nama) LIKE ‘%TA%’


   SQL> select nama, alamat
               from pegawai
               where id_departemen IN (1,2,6)


   SQL> select nama, email
               from pegawai
               where email IS NOT NULL




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   20
                                                       Praktikum 4
               Fungsi Agregat dan Fungsi Baku di Oracle

   A. Fungsi Agregat
   Fungsi agregat adalah fungsi-fungsi yang diaplikasikan pada sekelompok
   (grup) record/baris dan memberikan satu hasil untuk setiap grup yang ada.
   Fungsi         ini    dapat         mengambil              seluruh         tabel        sebagai         satu       grup,        atau
   membaginya menjadi beberapa grup berdasarkan kualifikasi tertentu.
   Format instruksi untuk fungsi agregat adalah :
                           SELECT                   [Kolom, ] Fungsi_Agregat(Kolom)
                           FROM                     NamaTabel
                           [WHERE                   Kondisi]
                           [GROUP BY Kolom]
                           [ORDER BY Kolom]


   Bagian instruksi yang berada dalam kurung siku [ ] merupakan bagian yang
   bersifat opsional, tidak harus digunakan.


   Beberapa jenis fungsi agregat yang sering digunakan adalah sbb:
   1. Fungsi AVG
         Fungsi ini mencari rata-rata dari seluruh record dalam atribut/kolom yang
         diminta, berdasarkan kualifikasi tertentu. Fungsi AVG hanya dapat
         digunakan untuk kolom yang bertipe numerik.
   2. Fungsi SUM
         Fungsi ini menjumlahkan nilai dari seluruh record dalam atribut/kolom
         yang diminta, berdasarkan kualifikasi tertentu. Fungsi SUM hanya dapat
         digunakan untuk kolom yang bertipe numerik.
   3. Fungsi MAX
         Fungsi         ini      mencari           nilai      maksimum               dari       seluruh          record          dalam
         atribut/kolom yang diminta, berdasarkan kualifikasi tertentu. Fungsi MAX
         dapat digunakan untuk kolom bertipe apapun.
   4. Fungsi MIN
         Fungsi ini mencari nilai minimum dari seluruh record dalam atribut/kolom
         yang        diminta,          berdasarkan              kualifikasi         tertentu.          Fungsi         MIN        dapat
         digunakan untuk kolom bertipe apapun.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   21
   5. Fungsi COUNT
         Fungsi ini menghitung jumlah record dalam atribut/kolom yang diminta
         berdasarkan kualifikasi tertentu. Untuk fungsi COUNT ini, digunakan
         instruksi COUNT(*) untuk mengembalikan seluruh record dalam tabel
         yang memenuhi kondisi di klausa WHERE (jika digunakan klausa
         WHERE), termasuk record yang merupakan duplikasi dan record dengan
         nilai NULL.
         Jika kita ingin mengabaikan record dengan nilai NULL, maka digunakan
         instruksi COUNT (nama_kolom) untuk menghasilkan jumlah record
         tidak NULL dari kolom yang diminta.
         Untuk menghilangkan duplikasi, digunakan instruksi COUNT (DISTINCT
         nama_kolom), sehingga dihasilkan jumlah record yang nilainya unik dan
         tidak NULL.
   Contoh :
   SQL> select AVG(gaji), MAX(gaji), MIN(gaji), SUM(gaji)
               from pegawai


   SQL> select AVG(gaji) “Gaji Rata-Rata”
               from pegawai
               where id_departemen=1


   SQL> select MIN(tanggal_masuk), MAX(tanggal_masuk)
               From pegawai


   SQL> select count(*) “Jumlah Pegawai”
               from pegawai
               where id_departemen = 1


   SQL> select id_departemen, count(*) “Jumlah Pegawai”
               from pegawai
               group by id_departemen


   SQL> select id_departemen, count(*) "Jumlah Pegawai",
               count(email) "Yang memiliki email"
               from pegawai
               group by id_departemen


   SQL> select count(distinct id_departemen) “Jumlah Departemen”
               from pegawai




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   22
   B. Klausa GROUP BY…HAVING...


   Klausa GROUP BY membagi baris dalam tabel menjadi kelompok-kelompok
   yang lebih kecil. Selanjutnya, setiap fungsi agregat akan diaplikasikan
   terhadap masing-masing kelompok tersebut.


   Untuk kelompok query GROUP BY, berlaku klausa HAVING yang berfungsi
   seperti klausa WHERE, dimana hanya kelompok/grup yang memenuhi kriteria
   yang diberikan di klausa HAVING yang akan diproses. (Catatan : Pada klausa
   WHERE, yang diproses adalah setiap record yang memenuhi syarat).


   Contoh :
    SQL> select id_departemen, AVG(gaji)
               from pegawai
               group by id_departemen


   SQL> select id_departemen, count(*) ”Jumlah Pegawai”, AVG(gaji)
               from pegawai
               group by id_departemen
               having AVG(gaji) > 1000


   SQL> select id_departemen, jenis_kelamin, count(*), avg(gaji)
               from pegawai
               group by id_departemen, jenis_kelamin


   C. Fungsi Baku di Oracle
   Oracle menyiapkan banyak fungsi yang dapat diakses langsung oleh program.
   Dalam praktikum ini akan diberikan contoh beberapa fungsi yang sering
   digunakan.
   1. Fungsi Aritmatika
         Salah satu fungsi aritmatika yang sering digunakan adalah ROUND
         dengan format instruksi ROUND (nilai, presisi).
         Fungsi ini akan menghasilkan pembulatan ke atas jika angka di belakang
         koma >0.5 dan pembulatan ke bawah jika <0.5
         Contoh :
               SQL> select round(avg(gaji),2)
                           from pegawai
                           group by id_departemen




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   23
         Fungsi aritmatika lainnya dapat dilihat sbb :
           ABS                               Nilai Absolut                                                  ABS(-23) = 23
                                                                                                            CEIL (5) =5
                                             Bilangan bulat terkecil, yang lebih                            CEIL (4.3) = 5
           CEIL
                                             besar atau sama dengan nilai                                   CEIL (-7) = -7
                                                                                                            CEIL (-7.2) = -7
                                                                                                            FLOOR (5) =5
                                                                                                            FLOOR (4.3) = 4
           FLOOR                             Kebalikan dari CEIL
                                                                                                            FLOOR (-7) = -7
                                                                                                            FLOOR (-7.2) = -8
                                                                                                            MOD (20, 4) = 0
           MOD                               Modula
                                                                                                            MOD (23, 5) = 3
           POWER                             Pangkat                                                        POWER (2, 3) = 8
           SQRT                              Akar                                                           SQRT (25) = 5
           EXP                               Eksponensial                                                    EXP (3) = 20.0855369

           LN, LOG                           Logaritma                                                      LN (3) = 1.098612

                                                                                                            TRUNC (5.55, 1) = 5.6
           TRUNC                             Pemotongan                                                     TRUNC (5.553, 2) =
                                                                                                            5.55
                                             Nilai absolut, 1 jika positif, -1 jika                         SIGN (27) = 1
           SIGN
                                             negatif                                                        SIGN (-27) = -1
           SIN, SINH, COS,
           COSH, TAN,                        Fungsi trigonometri
           TANH


   2. Fungsi Konversi
         Fungsi konversi yang sering digunakan a.l :
         a. Konversi string ke format tanggal (TO_DATE)


         Format :          SELECT          TO_DATE(string_tanggal_masukan, format_masukan)
                           FROM             DUAL
               Contoh :
               SQL> select to_date('12-07-2003', 'dd-mm-yyyy')
                           from dual
               SQL> select to_date('12/07/2005', 'dd-mm-yyyy')
                           from dual




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   24
         b. Konversi tanggal ke format karakter (TO_CHAR)


         Format :          SELECT                TO_CHAR(tanggal, format_keluaran)
                           FROM                  DUAL


         SYSDATE (SYSTEM DATE) digunakan untuk mengakses tanggal dari
         sistem.
         Contoh :
               SQL> select to_char (sysdate, 'dd-mm-yyyy')
                           from dual


               SQL> select to_char (sysdate, 'day dd/mm/yyyy')
                           from dual


               SQL> select to_char (sysdate, 'day dd-mm-yyyy hh:mm:ss')
                           from dual


         Kedua contoh di atas menggunakan tabel DUAL dalam klausa FROM-nya.
         Tabel DUAL merupakan tabel dummy yang disediakan oleh ORACLE untuk
         memproses ekspresi aritmatika, tanggal, dsb.                                               Tabel ini tidak berisi
         apapun, hanya merupakan pengenal bagi sistem bahwa instruksi SELECT
         tersebut digunakan untuk menjalankan ekspresi yang diberikan.
         Contoh :
               SQL> select ASCII (‘M')
                           from dual


               SQL> select ROUND (345.9876, 2)
                           from dual


               SQL> select 2 + 3 * 5
                           from dual


   3. Fungsi Tanggal (DATE)
   Beberapa fungsi tanggal diberikan sbb :
   a. ADD_MONTHS
         Fungsi untuk menambah atau mengurangi tanggal per satuan bulan.
         Contoh :
               SQL> select add_months ('12-Jul-05',1)
                           from dual;



Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   25
               SQL> select add_months ('12-Jul-05',-4)
                           from dual;


   b. LAST_DAY
         Fungsi ini menghasilkan tanggal terakhir dari bulan yang diberikan.
         Contoh :
               SQL> select last_day ('12-Jul-05')
                           from dual;


   c. MONTHS_BETWEEN
         Fungsi ini menghasilkan jumlah bulan yang ada di antara dua buah
         tanggal
         Contoh :
               SQL> select months_between ('1-Jul-05', ‘1-Sep-05’)
                           from dual;


               SQL> select months_between ('12 May 05’, ’24 Jun 06’)
                           from dual;


   d. NEXT_DAY
         Fungsi ini menghasilkan tanggal berikutnya untuk hari yang ditentukan di
         parameter masukan, terhitung dari tanggal masukan.
         Contoh :
         -     Hari Senin berikutnya (next monday) dari hari ini
               SQL> select next_day (sysdate, ‘Monday’)
                           from dual;


         -     Hari Minggu berikutnya dari tanggal 23 Agustus 2003
               SQL> select next_day (’23 Aug 2003’, ‘Sunday’)
                           from dual;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   26
                                                       Praktikum 5
                                   SubQuery dan Operasi Join

   A. SubQuery
         Misalnya kita ingin mencari nama pegawai yang memiliki gaji di atas rata-
         rata, kita menggunakan query sbb:
               SQL> select nama, gaji
                           from pegawai
                           where gaji > (select avg(gaji) from pegawai) ;


         Pada contoh di atas, predikat dalam klausa WHERE juga mengandung
         sebuah query. Bentuk query dalam klausa WHERE ini disebut sebagai
         subquery.
         Secara umum sintaks penulisan subquery adalah sbb :


                           select <daftar kolom yang ingin dipilih>
                           from <nama tabel>
                           where <kolom> <operator>
                                                                 ( select          <daftar           kolom           yang        ingin
                                                                 dipilih>
                                                                     from          <nama tabel>
                                                                     [where           kondisi]
                                                                 )


         Bagian yang dicetak miring merupakan subquery (inner query) dan yang
         tidak dicetak miring disebut query utama (outer query). Subquery
         dieksekusi satu kali sebelum query utama. Hasil dari subquery kemudian
         akan digunakan oleh query utama (outer query).
         Contoh penggunaan subquery antara lain :
         1. Mencari pegawai yang gajinya lebih besar dari Ali
                           SQL> select nama, gaji
                                        from pegawai
                                        where gaji > (select gaji
                                                                 from pegawai
                                                                 where nama=’Ali’ ) ;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   27
         2. Mencari pegawai yang bukan seorang manajer
                           SQL > select id_pegawai, nama
                                        from pegawai
                                        where id_pegawai not in (select distinct id_manajer
                                                                                     from pegawai)


         B. JOIN
               Untuk memperoleh data yang terdapat pada lebih dari satu tabel,
               digunakan            operasi          join.       Dengan          operasi         ini,     maka         kita      dapat
               menggabungkan record dari suatu tabel dengan record dari tabel lain
               berdasarkan nilai kolom tertentu. Kolom acuan ini terdapat di kedua
               tabel yang akan di-join dan umumnya memiliki nama yang sama.
               Biasanya kolom yang digunakan sebagai acuan dalam melakukan join
               adalah kolom primary key dan foreign key.
               Sintaks operasi join di Oracle adalah sbb :


                           select <daftar kolom yang ingin dipilih>
                           from tabel1, tabel2
                           where tabel1.kolom1 = tabel2.kolom2


               Klausa where menunjukkan kondisi join yang digunakan. Jika klausa
               where menggunakan operator sama dengan (=), maka operasi join
               yang dilakukan disebut equijoin (disebut juga inner join atau
               natural join). Jika operator yang digunakan bukan ‘=’, maka operasi
               join ini disebut non-equijoin.
               Contoh :
                           SQL> select nama, nama_departemen
                                        from pegawai, departemen
                                        where
                                  pegawai.id_departemen=departemen.id_departemen


               Selain kondisi join, pada klausa where juga dapat ditambahkan
               kondisi pencarian lainnya, misalnya sbb :
               SQL> select nama, gaji, pegawai.id_departemen, nama_departemen
                           from pegawai, departemen
                           where pegawai.id_departemen=departemen.id_departemen
                           and gaji > 1000




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   28
         C. JOIN dengan Menggunakan Alias
               Untuk menyederhanakan penulisan query, digunakan alias untuk
               menggantikan nama tabel yang digunakan dalam query. Penggunaan
               alias untuk sebuah tabel hanya berlaku untuk query tersebut.
               Contoh :
               SQL> select nama, gaji, p.id_departemen, nama_departemen
                           from pegawai p, departemen d
                           where p.id_departemen=d.id_departemen
                           and gaji > 1000


               Alias juga digunakan jika kita ingin melakukan join terhadap sebuah
               tabel dengan tabel itu sendiri. Dengan menggunakan alias, kita dapat
               memberi nama yang berbeda terhadap satu tabel yang sama, dan
               seolah-olah melakukan join terhadap dua tabel yang berbeda.
               Contoh :
               SQL > select bawahan.nama pegawai, atasan.nama manajer
                           from pegawai bawahan, pegawai atasan
                           where bawahan.id_manajer=atasan.id_pegawai
                           order by manajer;


         D. Operasi JOIN pada Banyak Tabel
               Untuk melakukan join pada n buah tabel, kita memerlukan minimal n-
               1 kondisi join dalam klausa where (tidak termasuk kondisi pencarian
               tambahan).
               Contoh :
               SQL > select nama nama_pegawai, nama_departemen, nama_jabatan
                           from pegawai, departemen, jabatan
                           where pegawai.id_departemen=departemen.id_departemen
                           AND
                           pegawai.id_jabatan=jabatan.id_jabatan
                           order by nama_departemen, nama_jabatan


         E. OUTER JOIN
               Pada contoh-contoh di atas, record-record yang tidak memenuhi
               kondisi join tidak akan ditampilkan. Agar record-record yang tidak
               memenuhi kondisi join juga ditampilkan, kita dapat menggunakan
               operator outer join (+) dalam ekspresi pada klausa where. Untuk




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   29
               setiap ekspresi dalam klausa where, operator outer join ini hanya
               dapat digunakan di satu sisi saja.
               Tanda ‘(+)’ diletakkan pada sisi tabel yang kekurangan informasi
               (tidak memiliki record yang sesuai/cocok).
               Contoh :
                           SQL > select nama, d.id_departemen, nama_departemen
                                        from pegawai p, departemen d
                                        where p.id_departemen (+) = d.id_departemen


               Selain dengan tanda ‘(+)’, OUTER JOIN juga dapat dilakukan dengan
               sintaks sbb :
               a. LEFT OUTER JOIN
                     Perintah ini menampilkan seluruh isi tabel yang ada di sisi kiri pada
                     ekspresi kondisi. Untuk instruksi ini, kita harus mengganti klausa
                     where dengan klausa ON(<kondisi>).
                     Contoh :
                           SQL > select nama, d.id_departemen, nama_departemen
                                        from pegawai p LEFT OUTER JOIN departemen d
                                        on (p.id_departemen = d.id_departemen)


               b. RIGHT OUTER JOIN
                     Perintah ini menampilkan seluruh isi tabel yang ada di sisi kanan
                     pada ekspresi kondisi. Untuk instruksi ini, kita harus mengganti
                     klausa where dengan klausa ON(<kondisi>).
                     Contoh :
                           SQL > select nama, d.id_departemen, nama_departemen
                                        from pegawai p RIGHT OUTER JOIN departemen d
                                        on (p.id_departemen = d.id_departemen)


               c. FULL OUTER JOIN
                     Perintah ini menampilkan seluruh isi kedua tabel yang ada pada
                     ekspresi kondisi. Untuk instruksi ini, kita harus mengganti klausa
                     where dengan klausa ON(<kondisi>).
                     Contoh :
                           SQL > select nama, d.id_departemen, nama_departemen
                                        from pegawai p FULL OUTER JOIN departemen d
                                        on (p.id_departemen = d.id_departemen)




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   30
                                                       Praktikum 6
                                    View dan SQL Plus Report

   A. VIEW
         View adalah ‘tabel’ yang dibangun dari hasil query terhadap satu atau
         beberapa tabel yang sudah ada. VIEW tidak membuat penyimpanan data
         secara          fisik      seperti          tabel        biasa,         melainkan              hanya          menyimpan
         referensi/pointer ke record di tabel-tabel yang berkaitan. View disebut
         juga ‘virtual table’.
         Secara umum, untuk membuat view digunakan sintaks sbb :
               CREATE VIEW NamaView (KolomView1, KolomView2, …) AS
                     SELECT             <Kolom_1, Kolom_2>
                     FROM               NamaTabel
                     WHERE              Predikat


         Contoh :


         SQL > create view GajiPegawai (ID_Pegawai, NamaPegawai, Gaji) as
                     select id_pegawai, nama, gaji
                     from pegawai


         SQL > create view StafPria as
                     select id_pegawai, nama, jenis_kelamin, alamat
                     from pegawai
                     where jenis_kelamin='L'


         View juga dapat dibuat dari beberapa tabel (hasil operasi join), misalnya
         sbb :


         SQL > create view StafHRD as
                     select nama,alamat,tanggal_masuk,gaji
                     from pegawai p, departemen d
                     where p.id_departemen=d.id_departemen
                     and d.nama_departemen='HRD';


         Untuk menghapus view digunakan perintah DROP VIEW.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   31
         Untuk langsung mengubah view tanpa harus menghapusnya terlebih
         dahulu digunakan kata kunci CREATE OR REPLACE VIEW.
         Contoh :
         SQL> CREATE OR REPLACE view StafHRD as
           2    select id_pegawai, nama, jenis_kelamin, tanggal_masuk,gaji
           3    from pegawai p, departemen d
           4    where p.id_departemen=d.id_departemen
           5    and d.nama_departemen='HRD'
           6 ;
         View created.


         Kita dapat melakukan manipulasi (INSERT, UPDATE, DELETE) terhadap
         view seperti terhadap tabel biasa. Namun kita harus memperhatikan
         constraint yang terdapat pada tabel asal (NOT NULL, dsb) sebelum
         memasukkan nilai dalam view.
         Perhatikan contoh-contoh berikut (menggunakan view StafPria yang sudah
         dibuat pada contoh sebelumnya).
         SQL> insert into StafPria values (66,'Budi','L',' ');
         insert into StafPria values (66,'Budi','L',' ')
         *
         ERROR at line 1:
         ORA-01400: cannot insert NULL into ("SYSTEM"."PEGAWAI"."ALAMAT")
         SQL> insert into StafPria values (66,'Ratih','P','Cisitu');


         1 row created.
         Commit complete.


         Dari contoh kedua, dapat dilihat bahwa walaupun pada saat pembuatan
         view kita sudah memberikan batasan jenis_kelamin = ‘L’ pada klausa
         WHERE, SQL Plus tidak dapat menolak nilai atribut jenis_kelamin yang
         bukan ‘L’.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   32
         Agar konsistensi dapat dijaga, maka pada saat pembuatan view harus
         ditambahkan ‘WITH CHECK OPTION’ pada akhir instruksi.


         SQL> create or replace view StafPria as
             2   select id_pegawai, nama, jenis_kelamin, alamat
             3   from pegawai
             4   where jenis_kelamin='L'
             5 WITH CHECK OPTION
             6 ;


         View created.


         SQL> insert into StafPria values (22,'Leli','P','ABC');
         insert into StafPria values (22,'Leli','P','ABC')
                                              *
         ERROR at line 1:
         ORA-01402: view WITH CHECK OPTION where-clause violation


         Dalam memanipulasi VIEW terdapat beberapa batasan sbb :
         -       Harus memperhatikan constraint NOT NULL (dan constraint lainnya)
                 pada basis tabel dari view tersebut sebelum memasukkan record baru.
         -       Tidak dapat melakukan INSERT atau UPDATE jika salah satu kolom
                 dalam view merupakan hasil kalkulasi atau fungsi.
         -       Tidak dapat melakukan INSERT, UPDATE, atau DELETE jika dalam
                 query yang membentuk VIEW                                tersebut terdapat klausa GROUP BY
                 atau DISTINCT




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   33
   B. SQL Plus Report
         SQL Plus Report dapat digunakan untuk membuat laporan sederhana,
         dengan menampilkan judul dan format output.
         Contoh :
               rem laporan
               rem file lapor.sql
               ttitle left 'test report'
               btitle off
               column nama heading 'Nama Pegawai'
               column nama format a15
               column nama_departemen heading 'Nama Departemen' format a25
               column gaji format 99999
               set linesize 100
               set pagesize 25
               set newpage 0


               break on nama_departemen skip 1


               select nama, nama_departemen, gaji
               from pegawai, departemen
               where pegawai.id_departemen = departemen.id_departemen
               order by nama_departemen asc, gaji desc
               ;
         Script di atas jika dijalankan di SQL Plus akan memberikan hasil sbb :




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   34
         Beberapa parameter yang berpengaruh dalam pembuatan SQL Plus Report
         a.l :


           Parameter                                             Deskripsi                                            Default
   set feedback on/off                  Menampilkan                jumlah          record         yang         On
                                        dipilih         (pada           contoh           9       rows
                                        selected)             Jika       off,      maka          pesan
                                        tersebut tidak akan muncul.
   set                    pause         Jika layar penuh, maka sistem akan
   “pesan…”                             menunggu sampai keyboard/ENTER
                                        ditekan               sebelum                melanjutkan
                                        tampilan.
   set pagesize n                       Menentukan jumlah baris dalam 1                                        14
                                        halaman
   set linesize n                       Menentukan jumlah karakter per baris                                   80
   set heading on/off                   Jika on, maka heading dari kolom                                       On
                                        akan ditampilkan
   set space n                          Menentukan jumah spasi antar kolom                                     0
                                                                                                               (nilai
                                                                                                               maksimum                  n
                                                                                                               adalah 10)
   set echo on/off                      Jika on, maka setiap instruksi dari                                    Off
                                        script akan ditampilkan
   set verify on/off                    Jika        on,        setiap         instruksi           akan         On
                                        ditampilkan             sebelum           dan        sesudah
                                        substitusi karakter (dengan simbol
                                        ‘&’)
   rem atau remark                      Komentar             untuk        memperjelas               alur
                                        program
   ttitle = top title                   Judul         pada         bagian          atas.         Untuk         ttitle center
                                        menghilangkan                  judul/titel           gunakan
                                        “ttitle      off”.      Untuk         mengatur            letak
                                        judul, gunakan ttitle left, ttitle right,
                                        ttitle center
   btitle        =      bottom          Sama dengan ttitle, tetapi letaknya di
   title                                bawah.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   35
          Parameter                                              Deskripsi                                            Default
   column                               Mendefinisikan                kolom           yang        akan
   NamaKolom                            ditampilkan dan heading untuk kolom
   heading                  ‘teks’      tersebut.
   format xxx                           Format yang berlaku adalah :
                                        9      :     numerik,           misalnya            999        (3
                                        karakter numerik) atau 99,999.99
                                        , : representasi koma
                                        . : representasi titik
                                        $ : menambahkan $ di depan angka
                                        An : display karakter, n menunjukkan
                                        jumlah karakter. Contoh : a10 (10
                                        karakter)
   Break on                             Memisahkan kelompok record yang
                                        satu        dengan           lainnya         berdasarkan
                                        kolom tertentu, dengan memberikan
                                        baris kosong sebanyak 1 baris (skip 1
                                        baris)




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   36
                                                       Praktikum 7
                      PL/SQL (Procedural Language - SQL)

   PL/SQL adalah bahasa pemrograman yang dikembangkan dari SQL. Melalui
   instruksi SQL seseorang melakukan query atau transaksi, yang kemudian
   akan menerima jawaban dari Database Server berupa hasil atau ResultSet.


   PL/SQL mengembangkan kemampuan SQL dengan menambahkan instruksi
   logic (procedural logic) berupa program aplikasi. Dengan PL/SQL, hasil proses
   SQL-Server              dapat         diolah         lebih        lanjut        dengan           menggunakan                  logika
   pemrograman prosedural seperti Fungsi, Prosedur, Loop, If Then Else, dsb.


   Kerangka PL/SQL


   PL/SQL terdiri atas 2 bagian, yaitu bagian Deklarasi dan Blok Program.
   Bagian         Deklarasi           terdiri       atas       definisi       variabel          yang        akan        digunakan,
   sedangkan blok program terdiri atas kode program yang dibatasis dengan
   BEGIN dan END.
   DECLARE


         /*deklarasi variabel*/


   BEGIN


         /*kode program*/


   END;


   Nilai variabel dapat diambil dari masukan user (via keyboard) dengan
   menggunakan perintah ACCEPT.
   Nilai variabel juga dapat diperoleh dari hasil query SQL. Untuk memasukkan
   hasil query SQL ke variabel PL/SQL digunakan klausa INTO. Jika kita
   memasukkan hasil query ke sebuah variabel, maka variabel tersebut harus
   memiliki tipe yang sama dengan kolom hasil query tersebut. Untuk




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   37
   menyamakan tipe data antara variabel program dan kolom tabel, PL/SQL
   memberikan fasilitas %TYPE.


   Berikut ini diberikan contoh program PL/SQL yang menampilkan output ke
   layar (untuk semua contoh yang diberikan dalam modul, pastikan anda telah
   memiliki tabael-tabel yang dibutuhkan) :


         ACCEPT p_id PROMPT 'Masukkan ID pegawai : '
         DECLARE
            v_ID           pegawai.id_pegawai%TYPE;
            v_nama pegawai.nama%TYPE;
            v_gaji         pegawai.gaji%TYPE;
         BEGIN
            v_ID:='&p_id';
            SELECT nama, gaji INTO v_nama, v_gaji FROM pegawai
               WHERE id_pegawai = v_ID;
            DBMS_OUTPUT.PUT_LINE('Nama pegawai : ' || v_nama);
            DBMS_OUTPUT.PUT_LINE('Gaji pegawai : ' || v_gaji);
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               DBMS_OUTPUT.PUT_LINE('Tidak ada pegawai dengan ID : ' || v_ID);
         END;


   Pada contoh di atas, terdapat perinta EXCEPTION di bagian akhir program.
   EXCEPTION adalah mekanisme untuk menangkap kesalahan (error) yang
   terjadi        pada         saat        program            dijalankan.             Misalnya           dalam          melakukan
   SELECT…WHERE…, jika kriteria yang dicari tidak ditemukan, maka sistem
   akan mengirim sinyal berupa ERROR NO_DATA_FOUND. Sinyal ini akan
   diolah oleh program melalui EXCEPTION.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   38
   Contoh lain diberikan sbb :


         ACCEPT p_id PROMPT 'Masukkan ID pegawai [1-9999] : '
         DECLARE
             v_ID          pegawai.id_pegawai%TYPE;
             v_nama pegawai.nama%TYPE;
             Empno_out_of_range EXCEPTION;


         BEGIN
             v_ID:='&p_id';
             IF v_ID > 9999 OR v_ID < 1 THEN
               RAISE Empno_out_of_range;
             ELSE
               SELECT nama INTO v_nama FROM pegawai
                                        WHERE id_pegawai = v_ID;
               DBMS_OUTPUT.PUT_LINE('Nama pegawai : ' || v_nama);
             END IF;
         EXCEPTION
             WHEN Empno_out_of_range THEN
               DBMS_OUTPUT.PUT_LINE('ID pegawai ' || v_ID ||
                ' tidak valid. ID pegawai harus berada di antara 1-9999');
             WHEN NO_DATA_FOUND THEN
               DBMS_OUTPUT.PUT_LINE('Tidak ada pegawai dengan ID : ' || v_ID);


         END;



   STORED PROCEDURE


   Sebuah stored procedure (atau stored function) adalah unit program PL/SQL
   dengan karakteristik sbb :
         -     memiliki nama
         -     dapat menerima parameter dan mengembalikan sebuah nilai
         -     disimpan dalam data dictionary
         -     dapat dipanggil oleh program lainnya
         -     dapat dipanggil oleh banyak user




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   39
   Sintaks untuk membuat prosedur adalah sbb :
         CREATE [or REPLACE] PROCEDURE NamProsedur (Parameter) AS
               Deklarasi_Variabel;
         BEGIN
               ….
               ….
         END;


   Untuk membuat fungsi :
         CREATE [or REPLACE] FUNCTION NamaFungsi (Parameter)
         RETURN TipeData AS
               Deklarasi_Variabel;
         BEGIN
               ….
               ….
               RETURN namaVar;
         END;


   Jika sudah ada prosedur/fungsi lain yang memiliki nama yang sama, klausa
   OR REPLACE akan menimpa prosedur lama tersebut dan mengganti dengan
   prosedur yang baru. Khsuus untuk fungsi, harus ada nilai yang dikembalikan
   dalam klausa RETURN.


   Stored procedure digunakan untuk menyimpan instruksi-instruksi yang sering
   digunakan sehingga kita tidak perlu mengetikkan sintaks SQL berulang kali.
   Perintah/query SQL dimasukkan dalam unit program PL/SQL dan disimpan
   sebagai suatu prosedur. Kemudian, setiap kali kita ingin menjalankan
   instruksi tersebut, kita tinggal memanggil nama prosedur yang diinginkan dan
   memberikan parameter yang sesuai.




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   40
   Beberapa contoh stored procedure diberikan sbb :


   -     Prosedur untuk menampilkan data seorang pegawai
         CREATE or REPLACE PROCEDURE
                           Data (Emp_number IN pegawai.id_pegawai%TYPE) AS
               Emp_ret pegawai%ROWTYPE;
         BEGIN
         SELECT *
               INTO Emp_ret
               FROM pegawai
               WHERE id_pegawai = Emp_number;
               DBMS_OUTPUT.PUT_LINE('Nama                                                : ' || Emp_ret.nama);
         DBMS_OUTPUT.PUT_LINE('Alamat                                                    : ' || Emp_ret.alamat);
         DBMS_OUTPUT.PUT_LINE('Jenis Kelamin                                             :                       '                      ||
         Emp_ret.jenis_kelamin);
         DBMS_OUTPUT.PUT_LINE('Email                                                     : ' || Emp_ret.email);
         DBMS_OUTPUT.PUT_LINE('Gaji                                          : ' || Emp_ret.gaji);


         END;


         Misal program                 di atas disimpan dalam                            file Data.sql. Maka untuk
         mengaktifkan prosedur tersebut digunakan perintah @ sbb :




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   41
   -     Prosedur dan fungsi untuk menampilkan gaji seorang pegawai
         CREATE               or         REPLACE                PROCEDURE                    Data_Gaji               (v_ID             IN
         pegawai.id_pegawai%TYPE) AS
               v_nama pegawai.nama%TYPE;
               v_gaji pegawai.gaji%TYPE;
         BEGIN
            SELECT nama, gaji
               INTO v_nama, v_gaji
               FROM pegawai
               WHERE id_pegawai = v_ID;




            DBMS_OUTPUT.PUT_LINE('Nama : ' || v_nama);
            DBMS_OUTPUT.PUT_LINE('Gaji : ' || v_gaji);
         END;


         Untuk memanggil prosedur di atas digunakan perintah sbb :




         Untuk mencari gaji seorang pegawai, kita juga dapat menggunakan fungsi
         sbb :
         CREATE                  or            REPLACE                   FUNCTION                     Cari_Gaji                  (v_ID
         pegawai.id_pegawai%TYPE)
               RETURN pegawai.gaji%TYPE IS
                     v_gaji pegawai.gaji%TYPE;
         BEGIN
            SELECT gaji
               INTO v_gaji
               FROM pegawai
               WHERE id_pegawai = v_ID;
            RETURN v_gaji;
         END;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   42
         Fungsi Cari_Gaji di atas dipanggil dengan cara sbb (misal disimpan dalam
         file fgaji.sql):




   -     Prosedur untuk menghapus data seorang pegawai


         create or replace PROCEDURE hapus_pegawai (id_peg IN NUMBER) AS
         BEGIN


         DELETE FROM pegawai WHERE id_pegawai = id_peg;
         IF SQL%NOTFOUND THEN
               dbms_output.put_line                       ('ID        pegawai             tidak        terdaftar            :       '   ||
               TO_CHAR(id_peg));
         ELSE
               dbms_output.put_line                         ('Data           pegawai              dengan              ID        '        ||
               TO_CHAR(id_peg) || ' telah dihapus ');


         END IF;


         END hapus_pegawai;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                             2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   43
   -     Prosedur untuk menaikkan gaji seorang pegawai
         CREATE           OR      REPLACE            PROCEDURE                Naik_gaji           (id_peg          IN      NUMBER,
         kenaikan_gaji IN NUMBER) AS


         BEGIN
               UPDATE pegawai
               SET gaji = gaji + kenaikan_gaji
               WHERE id_pegawai = id_peg;


               IF SQL%NOTFOUND THEN
                           dbms_output.put_line                      ('ID pegawai tidak terdaftar : ' ||
                           TO_CHAR(id_peg));
               ELSE
                           dbms_output.put_line                        ('Gaji        pegawai            dengan           ID       '     ||
                           TO_CHAR(id_peg)                      ||      '    telah         dinaikkan            sebesar           '     ||
                           TO_CHAR(kenaikan_gaji));
               END IF;


         END Naik_gaji;


         Prosedur di atas dipanggil sbb :




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   44
   -     Prosedur           untuk         menampilkan                nama-nama                pegawai           dalam          sebuah
         departemen

               CREATE           OR      REPLACE            PROCEDURE                List_pegawai              (nama_dept               IN
               departemen.nama_departemen%TYPE) IS
                  Emp_name                   pegawai.nama%TYPE;


                  CURSOR                c1 (dep departemen.nama_departemen%TYPE) IS
                                        SELECT nama FROM pegawai
                                        WHERE id_departemen =
                                                    (select id_departemen from departemen
                                                      where nama_departemen = nama_dept);
               BEGIN


                  OPEN c1(nama_dept);
                  LOOP
                           FETCH c1 INTO Emp_name;
                           EXIT WHEN C1%NOTFOUND;
                           DBMS_OUTPUT.PUT_LINE(Emp_name);
                  END LOOP;
                  CLOSE c1;


               END List_Pegawai;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   45
                                                       Praktikum 8
                                                          TRIGGER

   Trigger adalah prosedur yang disimpan dalam database dan akan dieksekusi
   secara otomatis ketika suatu event terjadi. Event yang memacu sebuah
   trigger dieksekusi disebut triggering-event. Eksekusi trigger dilakukan secara
   implisit (tidak terlihat oleh user)

   Sintaks dasar untuk membuat trigger adalah sbb :

   CREATE [OR REPLACE] TRIGGER <trigger_name>

           {BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name>

           [REFERENCING [NEW AS <new_row_name>] [OLD AS <old_row_name>]]

           [FOR EACH ROW [WHEN (<trigger_condition>)]]

           <trigger_body>


   Beberapa aturan yang harus diperhatikan dalam menggunakan trigger antara
   lain sbb :

         1. Kita dapat memasukkan                                   hingga          3      triggering           event         dengan
            menggunakan keyword ‘OR’
              Contoh :

                                  CREATE OR REPLACE TRIGGER TRIG1
                                  BEFORE INSERT OR DELETE OR UPDATE ON EMP
                                  ...

         2. Jika trigger hanya dijalankan untuk melakukan perubahan di kolom2
            tertentu saja, keyword ‘UPDATE’ dapat diikuti dengan keyword ‘OF’,
            kemudian diikuti dengan nama kolom yang diacu.
              Contoh :

                                  CREATE OR REPLACE TRIGGER TRIG2
                                  BEFORE UPDATE OF A, B OR INSERT ON R
                                  ...

         3. Klausa ‘FOR EACH ROW’ menandakan bahwa trigger yang dibuat
            adalah row-level trigger. Untuk trigger jenis ini, anda dapat
            menggunakan variabel khusus new untuk mengacu ke nilai tuple yang
            baru (setelah insert/update) dan old untuk mengacu ke nilai tuple
            yang lama (sebelum delete/update).

         4. Dalam trigger body, new dan old harus diawali dengan tanda “:”
             Contoh     :new, :old




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   46
         5. Dalam klausa WHEN, new dan old tidak diawali dengan tanda “:”

         6. Klausa REFERENCING dapat digunakan untuk memberi nama alias
            kepada variabel new dan old

         7. trigger body berisi blok PL/SQL

   Dalam praktikum ini, kita akan belajar bagaimana cara menggunakan trigger.

   Buatlah tabel2 berikut :

   CREATE TABLE              Emp_tab (
      Empno                  NUMBER NOT NULL,
      Ename                  VARCHAR2(10),
      Job                    VARCHAR2(9),
      Mgr                    NUMBER(4),
      Hiredate               DATE,
      Sal                    NUMBER(7,2),
      Comm                   NUMBER(7,2),
      Deptno                 NUMBER(2));

   CREATE TABLE Sal_log (
      Emp_id      NUMBER,
      Log_date    DATE,
      Old_salary NUMBER,
      New_salary NUMBER,
      Description VARCHAR2(20));

   CREATE TABLE Emp_log (
      Emp_id      NUMBER,
      Log_date    DATE,
      Action      VARCHAR2(20));


   CREATE TABLE Emp_status (
      Emp_id     NUMBER,
      Status     VARCHAR2(20) DEFAULT ‘NORMAL’);


   Kita akan menggunakan tabel-tabel di atas untuk mempelajari penggunaan
   trigger. Trigger akan dibuat untuk menangani aturan-aturan sbb :

   1. Setiap kali terjadi penambahan pegawai baru ke tabel Emp_tab, datanya
      akan langsung ditambahkan ke tabel Emp_status. Jika gaji pegawai
      tersebut < 500, maka statusnya akan di-set menjadi UNDERPAID, jika
      gajinya ≥ 500 maka statusnya adalah NORMAL.

            CREATE OR REPLACE TRIGGER NEW_EMP
            AFTER INSERT ON Emp_tab
            FOR EACH ROW
            BEGIN
               IF :new.sal < 500 THEN
                 INSERT INTO Emp_status VALUES (:new.empno, 'UNDERPAID');
               ELSE
                 INSERT INTO Emp_status VALUES (:new.empno, 'NORMAL');
               END IF;
            END;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   47
         Untuk memeriksa apakah trigger berfungsi atau tidak, lakukan langkah-
         langkah berikut :

            1. Masukkan data baru ke tabel Emp_tab (cukup empno, sal dan job
               saja)

                        SQL > insert into Emp_tab (empno,                                     sal)
                             Values (13, 400);
                        SQL > insert into Emp_tab (empno,                                     sal)
                             Values (23, 700);
                        SQL > insert into Emp_tab (empno,                                     sal, job)
                             Values (7499, 700, ‘CLERK’);
                        SQL > insert into Emp_tab (empno,                                     sal, job)
                             Values (7521, 700, ‘IT’);

            2. Periksa kembali isi tabel Emp_status. Seharusnya isi tabel
               Emp_status akan bertambah secara otomatis sesuai dengan data
               baru yang ditambahkan ke tabel Emp_tab. Cek apakah status sudah
               sesuai (NORMAL/UNDERPAID)

                        SQL > select * from Emp_status;


   2. Setiap kali dilakukan perubahan gaji seorang pegawai (baik naik maupun
      turun), maka :

            a. data di tabel Emp_status juga akan diperiksa sesuai dengan aturan
               yang dijelaskan di poin 1.

                        create or replace trigger sal_status after update on
                        Emp_tab
                        referencing new as nrow
                        for each row
                             when (nrow.sal < 500)
                             begin
                                     update Emp_status set status = 'UNDERPAID'
                                     WHERE Emp_status.emp_id = :NROW.EMPNO;
                             end sal_status;

                  Untuk memeriksa apakah trigger berfungsi atau tidak, lakukan
                  langkah-langkah berikut :

                  1. Lakukan update terhadap salah satu data di tabel Emp_tab

                                  SQL > update emp_tab set sal=450 where empno=7499;

                  2. Periksa isi tabel Emp_status. Seharusnya tabel Emp_status akan
                     ter-update secara otomatis. Cek status untuk empno 7499.

                                  SQL > select * from Emp_status;

            b. Histori perubahan gaji akan dicatat di tabel Sal_log, meliputi nilai
               gaji yang lama, gaji yang baru, tanggal perubahan, serta perubahan
               yang terjadi (INCREASE atau DECREASE).




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   48
                  CREATE OR REPLACE TRIGGER Log_salary_increase
                  AFTER UPDATE ON Emp_tab
                  FOR EACH ROW
                  BEGIN
                  IF :old.sal > :new.sal THEN
                   INSERT INTO Sal_log VALUES
                    (:new.Empno,SYSDATE,:old.SAL,:new.SAL,'SALARY DECREASE');
                  ELSE
                   INSERT INTO Sal_log VALUES
                    (:new.Empno,SYSDATE,:old.SAL,:new.SAL,'SALARY INCREASE');
                  END IF;

                  END;

                  Untuk memeriksa apakah trigger berfungsi atau tidak, lakukan
                  langkah-langkah berikut :

                  1. Lakukan update terhadap data gaji di tabel Emp_tab

                           SQL > update emp_tab set sal=1000 where empno = 7499;
                           SQL > update emp_tab set sal=1000 where empno = 7521;

                  2. Periksa isi tabel Sal_log. Seharusnya perubahan tadi akan dicatat
                     di tabel Sal_log secara otomatis. Cek kolom Description untuk
                     melihat apakah keterangan sudah sesuai (DECREASE/INCREASE)

                           SQL > select * from Sal_log;


   3. Setiap kali terjadi penambahan/pengurangan pegawai, akan dikeluarkan
      pesan yang memberitahu berapa total jumlah pegawai saat ini (setelah
      penambahan/pengurangan).

                           CREATE OR REPLACE TRIGGER Emp_count
                           AFTER DELETE OR INSERT ON Emp_tab
                           DECLARE
                                n INTEGER;
                           BEGIN
                                SELECT COUNT(*) INTO n FROM Emp_tab;
                                DBMS_OUTPUT.PUT_LINE(' There are now ' || n ||
                                    ' employees.');
                            END;

         Untuk memeriksa apakah trigger berfungsi atau tidak, lakukan langkah2
         berikut :

         1. Aktifkan serveroutput

                  SQL > set serveroutput on

         2. Lakukan penambahan/penghapusan data di tabel Emp_tab

                  SQL> insert into emp_tab (empno,ename) values (34,‘Dodi’);
                  SQL> delete from emp_tab where empno = 13;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   49
         3. Setiap kali query dijalankan akan muncul pesan yang memberitahukan
            jumlah pegawai yang tersisa. Periksa apakah jumlah yang ditampilkan
            sudah benar.


   4. Setiap kali terjadi perubahan posisi pegawai (job) akan dicatat historinya
      dalam tabel Emp_log.

                           create or replace trigger emp_hist after
                           update of JOB on Emp_tab
                           referencing new as nrow
                           for each row
                           begin
                             insert into Emp_log values
                                (:NROW.EMPNO,sysdate,'JOB   CHANGED                                               FROM         '       ||
                                :old.job || ' INTO '|| :nrow.job);
                           end EMP_HIST;

         Untuk memeriksa apakah trigger berfungsi atau tidak, lakukan langkah2
         berikut :
         1. Lakukan update terhadap data job di tabel Emp_tab

                  SQL > update emp_tab set job='Manager' where empno=7499;

         2. Periksa isi tabel Emp_log. Seharusnya perubahan tadi akan dicatat di
            tabel Emp_log secara otomatis. Cek kolom Action untuk melihat
            apakah keterangan sudah sesuai.

                  SQL > select * from Emp_log;




Modul Praktikum IF-319 Pengantar Basis Data                                                                                           2006
Dilarang memperbanyak dan/atau mengcopy sebagian atau seluruh isi dokumen ini tanpa persetujuan tertulis dari Institut Teknologi Harapan Bangsa   50

				
DOCUMENT INFO
Shared By:
Categories:
Stats:
views:472
posted:4/29/2011
language:Indonesian
pages:50