Kamis, 06 Oktober 2011

Pemrograman Basis Data Pert 4

Cursor
Definisi Cursor
Dalam blok PL/SQL tidak mengijinkan kita membuat query yang menghasilkan lebih dari satu baris untuk ditampung dalam sebuah variabel. Variabel semacam ini dinamakan cursor.



Kegunaan

  1. Untuk menerima hasil query yang jumlah barisnya lebih dari 1 baris
  2. Memungkinkan untuk melakukan proses yang lebih kompleks untuk setiap record
Macam - macam Cursor


Cursor : cursor eksplisit dan cursor implisit
  • Cursor Eksplisit : Cursor yang harus dideklarasikan terlebih dahulu sebelum digunakan

  • Contoh :
    DECLARE
        CURSOR c_nama IS
        SELECT nama_petugas FROM pegawai ORDER BY nama_petugas ASC;
        v_nama PETUGAS.nama_petugas%TYPE; /**%TYPE agar tipe data variabel v_nama sama dengan kolom nama_petugas?*/
    BEGIN
        FOR X IN c_nama
        LOOP
          DBMS_OUTPUT.PUT_LINE (c_nama%ROWCOUNT ||'Daftar Nama Petugas : ' || x.nama_petugas);
        END LOOP;
    END;
  • Cursor Implisit : Cursor yang tidak perlu dideklarasikan dulu pada declare section. contoh cursor implisit diasosiasikan dengan perintah SELECT, INSERT, DELETE, dan UPDATE
Contoh :
DECLARE
  id VARCHAR2(10);
  vnama_petugas PETUGAS.nama_petugas%TYPE;
BEGIN
  id := 'PG-010'; //assigment VALUE
  SELECT nama_petugas INTO vnama_petugas FROM PETUGAS WHERE id_petugas = id;
  IF SQL%NOTFOUND THEN
     DBMS_OUTPUT.PUT_LINE('Data ditemukan');
  ELSE
     DBMS_OUTPUT.PUT_LINE ('Nama petugas dengan id : ' || id || 'adalah ' || vnama_petugas);
  END IF;
END;
Ref Cursor
Kita dapat menggunakan ref cursor untuk mengembalikan nilai dalam bentuk recordset / cursor di store procedure.
Ada 2 tipe ref cursor :

  1. Strong ref cursor : tipe data dan panjangnya harus diketahui saat compile
  2. Weak ref cursor : tipe data dan panjangnya tidak dibutuhkan saat compile
Contoh :
DECLARE
  TYPE r_cursor IS REF CURSOR;
  c_emp r_cursor;
  en emp%rowtype;
BEGIN
  OPEN c_emp FOR SELECT * FROM emp;
  loop
      fetch c_emp INTO en;
      exit WHEN c_emp%notfound;
      dbms_output.put_line(c_emp%rowcount ||'. '||en.nama);
  END loop;
  close c_emp;
END;
 DECLARE
  TYPE r_cursor IS REF CURSOR;
  c_emp r_cursor;
  en emp%rowtype;
BEGIN
  OPEN c_emp FOR SELECT * FROM emp;
  loop
      fetch c_emp INTO en;
      exit WHEN c_emp%notfound;
      dbms_output.put_line(c_emp%rowcount ||'. '||en.nama);
  END loop;
  close c_emp;
END;
Menggunkan ref cursor di dalam loop
Contoh :
DECLARE
  TYPE r_cursor IS REF CURSOR;
  c_emp r_cursor;
  TYPE rec_emp IS record
  (
    deptno  varchar2(20),
    nama   NUMBER(6)
  );
  er rec_emp;
BEGIN
  FOR i IN (SELECT deptno,lokasi FROM location)
  loop
    OPEN c_emp FOR SELECT * FROM emp WHERE deptno = i.deptno;
    dbms_output.put_line(i.lokasi);
    dbms_output.put_line('--------------');
    loop
      fetch c_emp INTO er;
      exit WHEN c_emp%notfound;
      dbms_output.put_line(er.name || ' - ' || er.sal);
    END loop;
    close c_emp;
  END loop;
END;
pada variabel 'i' tersedia informasi pada tabel location (deptno, lokasi).

Persamaan dan perbedaan antara cursor dan ref cursor :

Persamaan :

  1. Untuk menerima hasil query yang jumlah barisnya lebih dari 1 baris
  2. Memungkinkan untuk melakukan proses yang lebih kompleks untuk setiap record
Perbedaan :

  1. Sebuah ref cursor dapat diasosiasikan dengan lebih dari 1 klausa SELECT saat run-time.
  2. Sebelum klausa SELECT baru, cursor sebelumnya harus ditutup dulu.
Sumber http://blog.neuronworks.net/2009/01/06/oracle-cursor-danref-cursor/

Constanta


Konstanta (constant) – nilai ditentukan pada saat deklarasi dibuat sehingga nilainya tetap 
pada saat program dieksekusikan.

Variabel

Variabel – dapat menerima nilai baru atau nilainya diubah pada saat program dieksekusikan. 

Waktu mendeklarasikan suatu variable atau konstanta, harus ditentukan  tipe data yang akan 
dipakai. Sehingga pada waktu mendeklarasikan variable atau konstanta, tipe data SQL dapat 
dipakai. Di samping tipe data SQL, PL/SQL mendukung  sejumlah tipe datanya sendiri sebagai 
berikut : 

  • BOOLEAN – dipakai untuk menyatakan data logika, yaitu TRUE (benar), FALSE (salah), dan NULL (kosong). 
  • BINARY_INTEGER – digunakan untuk mendeklarasikan bilangan yang tidak mempunyai angka decimal. Tipe data NATURAL dan POSITIVE merupakan subset dari BINARY_-INTEGER. 
  • %TYPE – tipe data ini jika dipakai menandakan bahwa veriabel yang dideklarasikan  sama dengan tipe data dari kolom table tertentu. Ini mempermudah deklarasi variable untuk menghitung tipe data kolom-kolom table yang sudah dibuat. 
  • %ROWTYPE - tipe data ini menandakan bahwa sekelompok variable tertentu adalah sama dengan tipe data dari row suatu table tertentu. 
  • Table dan Record – tipe data komposit (composite datatype) untuk pemakaian yang lebih kompleks.
sumber : http://syauqil22.webs.com/PL.pdf

Trigger

Trigger adalah blok PL/SQL atau prosedur yang berhubungan dengan table, view, skema atau database yang dijalankan secara implicit pada saat terjadi sebuah event. Trigger merupakan store procedure yang dijalankan secara automatis saat user melakukan modifikasi data pada tabel. Modifikasi data yang dilakukan pada tabel yaitu berupa perintah INSERT, UPDATE, dan DELETE. INSERT , UPDATE dan DELETE bisa digabung jadi satu trigger yang dinamakan Multiple Trigger.

Tipe dari trigger adalah :

· Application trigger : diaktifkan pada saat terjadi event yang berhubungan dengan sebuah aplikasi

· Database trigger : diaktifkan pada saat terjadi event yang berhubungan dengan data (seperti operasi DML) atau event yang berhubungan dengan sistem (semisal logon atau shutdown) yang terjadi pada sebuah skema atau database.

Trigger perlu dibuat pada saat :

· Membentuk sebuah aksi tertentu terhadap suatu event
· Memusatkan operasi global

Trigger tidak perlu dibuat, jika :

· Fungsionalitas yang diperlukan suatu ada pada Oracle server
· Duplikat atau sama dengan fungsi trigger yang lain.

Sintak penulisan dari database trigger, berisi komponen berikut :

1. Trigger timing :
a. Untuk tabel : BEFORE, AFTER
b. Untuk view : INSTEAD OF
2. Trigger event : INSERT, UPDATE atau DELETE
3. Nama tabel : yaitu nama tabel atau view yang berhubungan dengan trigger
4. Tipe trigger : Baris atau Pernyataan (statement)
5. klausa WHEN : untuk kondisi pembatasan
6. trigger body : bagian prosedur yang dituliskan pada trigger

Trigger timing adalah waktu kapan trigger diaktifkan. Ada tiga macam trigger timing, yaitu :

· BEFORE : trigger dijalankan sebelum DML event pada tabel
· AFTER : trigger dijalankan setelah DML event pada tabel
· INSTEAD OF : trigger dijalankan pada sebuah view.

Trigger event ada 3 kemungkinan : INSERT, UPDATE atau DELETE.
Pada saat trigger event UPDATE, kita dapat memasukkan daftar kolom untuk mengidentifikasi kolom mana yang berubah untuk mengaktifkan sebuah trigger (contoh : UPDATE OF salary ... ). Jika tidak ditentukan, maka perubahannya akan berlaku untuk semua kolom pada semua baris.

Tipe trigger ada 2 macam, yaitu :

· Statement : trigger dijalankan sekali saja pada saat terjadi sebuah event. Statement trigger juga dijalankan sekali, meskipun tidak ada satupun baris yang dipengaruhi oleh event yang terjadi.

· Row : trigger dijalankan pada setiap baris yang dipengaruhi oleh terjadinya sebuah event. Row trigger tidak dijalankan jika event dari trigger tidak berpengaruh pada satu baris pun.

Trigger body mendefinisikan tindakan yang perlu dikerjakan pada saat terjadinya event yang mengakibatkan sebuah trigger menjadi aktif.

sumber : www.osun.org/contoh+penggunaan+trigger+sql-pdf.html

Sequence
sequence adalah digunakan untuk mengurutkan data yang unik yang di ciptakan oleh sistem secara otomatis.

0 komentar:

Posting Komentar

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites More