Belajar Menulis dan Membaca Part 4 [Cursor Eksplisit dan Implisit]

Diposting oleh about my life ^_^

CURSOR

Cursor merupakan sejenis variabel yang dapat digunakan untuk menampung banyak nilai berupa baris atau record. dapat dikatakan pula kursor adalah pointer yang menunjuk ke suatu bagian memori untuk menyimpan hasil intruksi SQL. hasil intruksi tersebut biasanya merupakan multiple row, dan kursor digunakan untuk menunjuk pointer ke salah satu baris. Kursor terdiri dari 2 macam, yaitu kursor implisit dan eksplisit. 

1. Cursor Implisit 
    cursor implisit merupakan cursor yang tidak perlu di deklarasikan sebelumnya. cursor ini berasosiasi dengan perintah SELECT, INSERT, DELETE, dan UPDATE.

contoh koding yang menggunakan cursor implisit
    contoh 1:

    declare
    nama_cari varchar(15);
    nama_depan varchar(15);
    nama_belakang varchar(15);
    gaji varchar(10);
    begin
    nama_cari := '&masukkan_nama';
    select first_name, last_name, salary
    into nama_depan, nama_belakang, gaji
    from employees
    where first_name = nama_cari;
    dbms_output.put_line('pegawai bernama '||nama_depan||’ ‘ ||nama_belakang||' gajinya adalah USD '||gaji);
    end;
    /

 contoh 2:
    declare 
    nama_cari employees.first_name%typenama_depan employees.first_name%type;
    alamat_email employees.email%type;
    telepon employees.phone_number%type;
    begin
    nama_cari := '&masukkan_nama';
    select first_name, email, phone_number
    into nama_depan, alamat_email, telepon
    from employees
    where first_name = nama_cari;
    dbms_output.put_line('Nama: '||nama_depan);
    dbms_output.put_line('Email: '||alamat_email||'@SemogaJaya.co.id');
    dbms_output.put_line('Telepon: '||telepon);
    end;
    /

2. Cursor Eksplisit
    Cursor eksplisit merupakan cursor yang harus dibuka dan ditutup secara manual. 
       
DOFC  (DECLARE, OPEN, FETCH, CLOSE)
Declare
cursor [nama_cursor_bebas] is
select [daftar_kolom]
from [daftar_tabel]
where [syarat];
begin
open [nama_cursor_bebas];
loop
  fetch [nama_cursor_bebas] into [daftar_variabel];
  exit when [nama_cursor_bebas] %notfound;
  [aksi_lain]
end loop;
close [nama_cursor_bebas];
end;
/

contoh kodingan cursor eksplisit
contoh 1:
     declare
nama_cari employees.first_name%type;
nama_depan employees.first_name%type;
nama_belakang employees.last_name%type;
gaji employees.salary%type;
cursor anu is
select first_name, last_name, salary
from employees
where first_name = nama_cari;
begin
nama_cari := '&masukkan_nama';
open anu;
loop
  fetch anu into nama_depan, nama_belakang, gaji;
  exit when anu%notfound;
  dbms_output.put_line('pegawai bernama '||nama_depan||' ' ||nama_belakang||' gajinya adalah USD '||gaji);
end loop;
close anu;
end;
/

 contoh 2:   
         declare
nama_cari employees.first_name%type;
nama_depan employees.first_name%type;
alamat_email employees.email%type;
telepon employees.phone_number%type;
cursor anu is
select first_name, email, phone_number
from employees
where first_name = nama_cari;
begin
nama_cari := '&masukkan_nama';
open anu;
loop
  fetch anu into nama_depan, alamat_email, telepon;
  exit when anu%notfound;
  dbms_output.put_line('Nama: '||nama_depan);
  dbms_output.put_line('Email: '||alamat_email||'@SemogaJaya.co.id');
  dbms_output.put_line('Telepon: '||telepon);
  dbms_output.put_line(‘-----------------------------------------------------------’);
end loop;
close anu;
end;
/

 
Menambahkan Exception Handling
         setiap kesalahan (error) atau peringatan (warning) yang muncul karena suatu perintah disebut sebagai exception. blok exception dapat ditempatkan dalam blok sebagai exception handling
 

contoh peletakan exception:
    declare
    a employees.first_name%type;
    b employees.first_name%type;
    c employees.first_name%type; 
    begin
    c:='&nama_cari';
    select first_name, salary
    into a, b
    from employees
    where first_name = c;
    dbms_output.put_line('Gajinya '||a||' adalah USD '||B);
    exception
    when no_data_found then
      dbms_output.put_line('Maaf nama '||c||' tidak ditemukan');
    when too_many_rows then
      dbms_output.put_line('Maaf nama '||c||' lebih dari 1
      orang');

    end; 
    /

 

 

Belajar Menulis dan Membaca Part 3 [Looping]

Diposting oleh about my life ^_^

- LOOP
  strukutur simpel loop digunakan bila diinginkan minimal iterasi dijalankan satu kali. dalam struktur ini harus ditambahkan statement exit when untuk menghindari eksekusi tak terbatas (infinitif).


contoh program yang memakai loop:
      DECLARE
      total number(9);
      counter number(6);

      BEGIN
      total:=0;
      counter:=10;
      LOOP
         total:=total+counter;
         EXIT WHEN total > 50;
      END LOOP;
      DBMS_OUTPUT.PUT_LINE('Counter: ' || counter);
      DBMS_OUTPUT.PUT_LINE('Total: ' || total);

      END;
      /

- FOR
  Struktur ini tidak memiliki kondisi, sehingga perlu didefinisikan indeks minimal dan maksimal sebagai batas iterasi. umumnya struktur ini digunakan untuk iterasi yang banyaknya sudah diketahui dengan pasti.


contoh program yang memakai for:
 contoh 1:
     DECLARE
     x number(3);


    BEGIN
    x:=berapa;
   for i IN 1..x LOOP
      DBMS_OUTPUT.PUT_LINE('Ini angka ' || i);
   END LOOP;
   END;
   /


 contoh 2 (memakai IF)

    Declare
    x number(3);

    BEGIN
    X:=&berapa;
    FOR i IN 1..x LOOP
    if mod(i,2) = 1 then
       DBMS_OUTPUT.PUT_LINE('Ini angka ' || i );
    else
      DBMS_OUTPUT.PUT_LINE('Ini angka ' || ‘i’ );
    end if;
    END LOOP;
    END;
    /

- Statemen WHILE
  Struktur ini selalu memeriksa kebenaran kondisi di awal blok iterasi. Bila kondisi bernilai FALSE, maka statemen-
statemen dalam blok iterasi tidak akan dieksekusi.

contoh program yang memakai WHILE:
DECLARE
i NUMBER(3);
hasil NUMBER(5);

BEGIN
i:=1;
WHILE i <= 10 LOOP
   hasil := i**3;
   DBMS_OUTPUT.PUT_LINE(i ||' pangkat 3 = '|| hasil );
   i := i + 1;
END LOOP;

END;
/

 

Belajar Menulis dan Membaca Part 2 [IF Conditional]

Diposting oleh about my life ^_^

Perintah IF terdiri atas 3 bentuk, yaitu IF THEN, IF THEN ELSE, serta IF THEN ELSEIF. struktur dari ketiganya ditampilkan dalam satu rumusan umum sebagai berikut:

     IF kondisi 1 THEN
        baris perintah....
    [ELSEIF kondisi 2 THEN
        baris perintah....]
    ....
    [ELSE
       baris perintah...]
    END IF;


-  IF THEN
pada struktur IF THEN, PL/SQL hanya mengecek sebuah kondisi. apabila kondisi tersebut  terpenuhi, maka statment-statment dalam blok pemilihan tersebut akan dieksekusikan terlebih dahulu sebelum dilanjutkan ke statment dibawah blok pemilihan.

- IF THEN ELSE
pada struktur ini, perlu di definisikan kondisi khusus untuk mengatasi apabila kondisi yang di definisikan pada blok IF tidak terpenuhi. kondisi khusus tersebut diletakkan pada bagian ELSE. apabila kondisi IF (bernilai TRUE) maka statement-statement A akan dieksekusi terlebih dahulu sebelum dilanjutkan ke statment yang berada di bawah blok pemilihan. bila kondisi IF tidak terpenuhi maka statment-statmen B yang akan di eksekusi terlebih dahulu sebelum dilanjutkan ke statment-statment yang berada di bawah blok pemilihan.

- IF THEN ELSEIF
pada struktur ini, minimal terdapat dua kondisi yang harus diperiksa dan satu tambahan kondisi khusus yang akan mengatasi kejadian dimana semua kondisi yang didefinisikan tidak terpenuhi (bernilai FALSE)

Contoh-contoh about IF

contoh 1:
    declare
    x varchar(10);
    y number(5);

    begin
    x:= ‘tes';
    Y:= 15;
    dbms_output.put_line('Selamat Datang '||x);

    if y < 25 then
    dbms_output.put_line(‘tes lagi ah’);
    end if;

    end;
    /

Contoh 2:
    declare
    nama varchar(10);
    harga number(5);
    diskon number(3);
    bayar number(5);

    begin
    nama:= '&nama';
    harga:= &harga_buku;
    diskon := &diskon;
   dbms_output.put_line('Selamat Datang '||nama);
   bayar:= harga*((100-diskon)/100);
   dbms_output.put_line('Harga yang harus dibayar adalah    rp.'||bayar);
   if diskon < 25 then
   dbms_output.put_line('pelit');
   end if;

   end;
   /
 

Contoh 3:
   declare
   jk varchar(10);
   umur number(5);

   begin
   jk := '&jenis_kelamin';
   umur := &umur;
   if (umur > 60) then
   dbms_output.put_line('inget mati...');
   elsif (jk = 'L' and umur >= 25) or (jk='P' and umur >= 20) then
   dbms_output.put_line('buruan nikah bisi expired');
   elsif (jk = 'L' and umur < 25) or (jk='P' and umur < 20) then
   dbms_output.put_line('belajar dulu yg bener');
   end if;

   end;
   /


 ** Pengen tambah pinter ga DBMS nya??? Ayoo, buka CMD nya and let's go to Work an this example.. :))

 
 

ANONYMOUS PL/SQL

Diposting oleh about my life ^_^

urutan penulisan koding anonymous PL: 

declare
.................
.................

begin
.................
.................

end;
/

1. Declaration Section
    Digunakan untuk mendefinisikan variabel, konstanta, dan seluruh exception yang di definisikan oleh user yang akan digunakan pada bagian eksekusi. penulisan blok ini dimulai dengan menulis DECLARE.
contoh:
                  declare
        v_nama   mahasiswa.nama%type;
        v_nim    mahasiswa.nim%type;

2. Executable section
    Digunakan untuk mengeksekusi/menjalankan blok perintah PL/SQL seperti pengulangan, percabangan, berisi statment SQL untuk memanipulasi data pada basis data dan statement PL/SQL untuk memanipulasi data dalam blok.
contoh:
                 declare
        v_nama   mahasiswa.nama%type;
        v_nim    mahasiswa.nim%type;

        begin

        select nim,nama into v_nim, v_nama
        from pegawai
        where nim=30109229
        dbms_output.put_line(v_nama);

        end;
        \
           

- Contoh 1: menampilkan tanggal, bulan, dan tahun
               declare

       begin
       dbms_output.put_line('now is '||to_char(SYSDATE,'DAY'));
       dbms_output.put_line('date '||to_char(SYSDATE,'DD'));
       dbms_output.put_line('month '||to_char(SYSDATE,'MONTH'));
       dbms_output.put_line('year '||to_char(SYSDATE,'YYYY'));

       end;

       /

- Contoh 2: menginputkan angka untuk mengetahui luas dan keliling suatu persegi              

      declare
      x number(3);
      y number(3);
      keliling number(3);
      luas number(3);

      begin
      x:=&nilai_x ;
      y:=&nilai_y ;
      keliling:= 2*(x+y);
     luas:= x*y;

     dbms_output.put_line('persegi panjanga ini kelilingnya '||  keliling|| 'cm');
     dbms_output.put_line('Luasnya adalah '|| luas || 'cm');

     end;
     /


- Contoh 3:Membuat Kalkulator
         declare
     x number(3);
     y number(3);
     z number(3);
     a number(3);
     b number(3);

     begin
     dbms_output.put_line('selamat datang di kalkulator cupu');
     x:=&nilai_x;
     y:=&nilai_y;
     z:=x+y;
     a:=x-y;
     b:=x*y;
     dbms_output.put_line(x||'ditambah'||y||'samadengan'||z);
     dbms_output.put_line(x||'dikurang'||y||'samadengan'||a);
     dbms_output.put_line(x||'dikali'||y||'samadengan'||b);

     end;
     / 


** Pengen tau Outputan dari contoh2 di atas???
biar DBMS nya pintar, ayooo coba sendiri okeh!!! :)

DDL & DML

Diposting oleh about my life ^_^


INSERT
·         Format MENAMBAH DATA JIKA SEMUA KOLOM AKAN DIISI:
INSERT INTO      Nama_Tabel      VALUES (
Data_kolom1,
Data_kolom2,
Data_kolom3
);

·         Contoh penggunaan Insert jika semua kolom ingin diisi:
insert into anggota values(               
30109229,           
‘Megawati Dini A,   
‘Tasikmalaya’
);

·         FORMAT MENAMBAH DATA JIKA HANYA KOLOM TERTENTU YANG DIISI:
INSERT INTO      Nama_Tabel      (Nama_Kolom1, Nama_Kolom2)
VALUES (
Data_kolom1,
Data_kolom2
);

·         Contoh Menambah data pada tabel anggota hanya pada kolom-kolom tertentu saja:
insert into registrasi (id_anggota, jenis_kelamin, tanggal_lahir)
values(             
‘BA6369’,           
Perempuan,
’14-MAY-1991’
);

** Note:
-          Insert untuk semua kolom memperhatikan urutan kolom sesuai perintah DESC Nama_Tabel
-          Untuk tipe data selain number penulisan data diapit dengan petik tunggal (‘)
-          Format Penulisan Date : DD-MON-YYYY (2 digit tanggal, 3 digit awal bulan dalam bhs inggris, 4 digit tahun)


 UPDATE

·         FORMAT MENGUBAH DATA
UPDATE  Nama_Tabel
SET           Nama_Kolom = data_baru
WHERE syarat_perubahan_data;
·         Contoh 1:Mengubah semua alamat anggota menjadi ‘Tasikmalaya ’
update anggota set alamat_anggota = ‘Tasikmalaya’;

·         Contoh 2: Mengubah no_anggota dari 100 menjadi 105
update anggota set no_anggota = 105
where no_anggota = 100;

·         Contoh 3: Mengubah semua alamat anggota menjadi Tasikmalaya’ jika nomor anggota antara 200 dan 300
update anggota set alamat_anggota = ‘Tasikmalaya’
where (no_anggota >= 200) and (no_anggota <= 300);


DELETE

·         FORMAT MENGHAPUS DATA:
DELETE FROM    Nama_Tabel
WHERE                                 syarat_perubahan_data ;

·         Contoh1:  Menghapus seluruh isi tabel anggota
delete from anggota ;

·         Contoh2: Meghapus data anggota yang nomor anggotanya 100
Delete from anggota
where no_anggota = 100;

·         Contoh3: Menghapus semua data anggota yang nomor anggotanya mulai 200 sampai 300
delete from anggota
where (no_anggota >= 200) and (no_anggota <= 300);


             SELECT … FROM … WHERE
·         Format Query Data:
SELECT daftar_kolom
FROM   daftar_tabel
WHERE                 syarat_dan_atau_foreign_key

·         Fungsi Agregat: MIN(), MAX(), AVG(), SUM(), COUNT()
SELECT    daftar_kolom_non_fungsi_ag, fungsi_ag(nama_kolom1),  fungsi_ag(nama_kolom2)
FROM                   daftar_tabel
WHERE                syarat_dan_atau_foreign_key
GROUP BY           daftar_kolom_non_fungsi_ag

(*) Fungsi agregat dapat digunakan sebagai pengganti daftar kolom, digunakan setelah SELECT...
(*) Jika setelah SELECT digunakan fungsi agregat bersama kolom yang lain yang bukan fungsi agregat maka HARUS menggunakan klausa GROUP BY. Perhatikan contoh 3,4,5 dan 6

·         Contoh1: Menampilkan nama dan alamat anggota yang diawali huruf A dan terdiri dari 5 huruf
select nama_anggota, alamat_anggota
from anggota
where nama_anggota like 'A____';

·         Contoh2: Menampilkan nama anggota dan judul buku yang diawail huruf W dan terdiri dari MINIMAL 8 huruf:
select nama_anggota, judul_buku
from anggota, buku, peminjaman
where anggota.no_anggota = peminjaman.no_anggota
and buku.id_buku = peminjaman.id_buku
and judul_buku like 'W_______%';

·         Contoh3: Menampilkan jumlah buku yang pernah dipinjam oleh Ngatiyem (dengan menampilkan nama Ngatiyem)
select nama_anggota, count(id_buku) as jmlbuku
from peminjaman, anggota
where anggota.no_anggota = peminjaman.no_anggota
and nama_anggota = 'Ngatiyem'
group by nama_anggota;

·        Contoh 4: Menampilkan judul buku dan tanggal peminjaman buku oleh Ngatimin yg tidak dikembalikan
select judul_buku, tanggal_pinjam
from peminjaman, anggota, buku
where anggota.no_anggota = peminjaman.no_anggota
and buku.id_buku = peminjaman.id_buku
and nama_anggota = 'Ngatimin'
and tanggal_kembali is null;