Pemrograman Database II€¦ · Komentar -- hanya di guanakan untuk satu baris. Contoh /* ini...
Transcript of Pemrograman Database II€¦ · Komentar -- hanya di guanakan untuk satu baris. Contoh /* ini...
PROGRAM STUDI TEKNIK INFORMATIKA 2019
Pemrograman Database 2
PROGRAM STUDI SISTEM INFORMASI
2019
Disusun oleh : Tim Dosen
Sekolah Tinggi Ilmu Komputer Dinamika Bangsa - Jambi
BAB IV
1.1. PENGENALAN PL/SQL
PL/SQL (Procedural Language extensions to SQL) adalah sebuah teknologi dari Oracle yang memperbolehkan anda membuat blok program sebagai mana layak nya pemrograman procedural seperti C, Fotran, Cobol dan lainnya. Tanpa adanya PL/SQL, Oracle akan melakukan perintah yang berulang-ulang ke dalam database server dan ini tentu akan memurunkan performa, terutama dalam masalah kecepatan akses data. hal ini disebabkan karena oracle melakukan eksekusi statement oracle sekali dalam setiap waktu.
Sedangkan dengan menggunakan PL/SQL , Aplikasi dapat mengirimkan
beberapa (sekumpulan ) statement kedalam database secara langsung dalam sekali waktu.
1.2. BLOK PL/SQL
Blok PL/SQL Oracle Terdiri dari tiga bagian yaitu
DECLARE -->opsional --berisikan deklarasi variabel, konstanta, prosedur, fungsi, dll BEGIN-->wajib --statement-statement PL/SQL --statement-statement SQL EXCEPTION-->opsional --berisi perintah untuk mengatasi error yang mungkin terjadi END;-->wajib
DASAR-DASAR PL/SQL
Tipe-Tipe data yang di dukung oleh oracle yang di tulis dalam Blok PL/SQL.
Nama Tipe Keterangan
INTEGER Numerik Untuk Semua Tipe Numerik
BINARY_INTEGER Numerik Didalamnya Meliputi tipe unsigned Integer
DEC Numerik Untuk Bilangan real(Pecahan)
DOUBLE PRECISION
Numerik Untuk Bilangan real presisi tinggi
INTEGER Numerik Untuk Bilangan Bulat
INT Numerik Untuk Bilangan Bulat
NUMERIC Numerik Sama dengan NUMBER
REAL Numerik Sama Dengan NUMBER
SMALLINT Numerik Untuk Bilangan Bulat dengan rentang yang kecil
VARCHAR2 Karakter Untuk string dengan panjang dinamis sesuai dengan panjang maksimal yang di tentukan
CHAR Karakter Untuk String untuk Panjang yang sudah Pasti
LONG Karakter Untuk string dengan panjang yang sudah pasti
DATE Tanggal Untuk Tipe Tanggal
BOOLEAN Bolean Bernilai TRUE dan FALSE
ROWID Rowid Untuk Tipe Rowid
Contoh :
Apa yang terjadi? Text yang kita tulis belum muncul? Ini disebabkan karena kita belum mengangtifkan variabel sistem SERVEROUTPUT didalam SQL*Plus. Perintah untuk menghidupakannya yaitu:
1.3. Komentar Komentar adalah bagian dari kode program yang tidak di eksekusi. Komentar dalam oracle dapat dibuat dengan menggunakan dua cara, yaitu dengan menggunakan tanda /*…*/ atau -- . perintah /*…*/ di adopsi dari bahasa c yang di gunakan untuk komentar yang lebih dari satu baris. Komentar -- hanya di guanakan untuk satu baris. Contoh
/* ini adalah komentar yang banyaknya
Lebih dari satu baris */
1.4. Variabel dan konstansta 1.4.1. Variabel
Cara Deklarasi variabel dalam oracle
x integer; y number; nama varchar2(25);
Note
Variabel tidak boleh di awali oleh angka.
Variabel tidak boleh mengandung simbol Contoh Penggunaan variable dalam Blok PL/SQL Declare
nama varchar2(30); jabatan varchar2(30); gaji number (6,2);
begin select last_name, job_id, salary into nama, jabatan, gaji from employees where employee_id =120; dbms_output.put_line('Data Karyawan dengan NIK 120'); dbms_output.put_line('Nama : '|| nama); dbms_output.put_line('Jabatan : '|| jabatan);
dbms_output.put_line('Gaji : '|| gaji); end;
1.4.2. Konstanta
Bentuk Umum Konstanta NamaKonstanta CONSTANT tipe_data:=nilai; Contoh deklarasi konstanta declare
pi constant real:=3.14;
lebar constant integer:=10;
Contoh : Declare --deklarasi variabel dan konstanta
Nama Varchar2(30); GaPok number(8,2); Pajak constant real := 0.10; Tunjangan constant real := 0.25 ; Gajibersih number(8,2);
Begin Select Last_name, Salary INTO Nama, Gapok From Employees Where Department_id = 10; Gajibersih:= gapok + (gapok * tunjangan) - (gapok * pajak); Dbms_output.put_line ('Data Gaji Karyawan'); Dbms_output.put_line ('-----------------------------'); Dbms_output.put_line ('Nama : '|| nama); Dbms_output.put_line ('Gaji Pokok : '|| to_char(gapok,'$99,999')); Dbms_output.put_line ('Tunjangan : '|| gapok * tunjangan ); Dbms_output.put_line ('Pajak : '|| gapok * pajak ); Dbms_output.put_line ('Gaji Bersih : '|| gajibersih);
End;
2.1. Operator 2.1.1. Operator Assignment
Operator Pengerjaan di tandai dengan (:=) Contoh NAMA := ‘Toko Mulya’ ; JUMLAH := 12; 2.1.2. Operator Logik Operator Logik Merupakan Operator yang memberikan nilai TRUE atau FALSE
Operator Keterangan
AND Bernilai Benar jika Semua Kondisinya Terpenuhi
OR Bernilai Benar jika salah satu atau semua kondisinya terpenuhi`
NOT Ingkaran
2.1.3. Operator Aritmatika Operator ini di gunakan untuk operasi-operasi aritmatika
Operator Keterangan
+ Penambahan
- Pengurangan
* Perkalian
/ Pembagian
MOD Modulus (sisa Bagi)
Contoh Declare Hasil integer; Begin Hasil := 10/3; Dbms_output.put_line(‘10/3=’||to_char(hasil)); End;
OPERATOR DAN FUNGSI BAKU
Hasil yang di berikan Operator
Contoh Declare Hasil real; Begin Hasil := 10/3; Dbms_output.put_line(‘10/3=’||to_char(hasil)); End;
2.1.4. Operator Relasional Opertor ini digunakan untuk pengkondisian dan percabangan
Operator Keterangan
> Lebih Besar
>= Lebih Besar atau sama dengan
< Lebih Kecil
<= Lebih Kecil atau sama dengan
= Sama dengan
<> Tidak sama dengan
2.1.5. Operator pada Tipe Data String Dalam Oracle kita sering melakukan penggabungan terhadap string. Oracle menyediakan operator || untuk menjawab pertanyaan. Contoh
Declare Nama varchar2(30) := ‘PT. Mulya’; Kota varchar2(15):=’Bandung’; Spasi char(1):=’ ‘; Begin
anonymous block completed 10/3=3
anonymous block completed 10/3=3.3333333333333333333333333333333333333
Dbms_output.put_line(Nama||spasi||kota); End;
Hasil dari penggunaan Operator ||
2.2. Fungsi Baku Dalam Oracle Fungsi Numerik
Fungsi Keterangan Contoh
ABS Memperoleh Nilai Absolut ABS(-123)=123
ROUND(Nilai,Presisi) Melakukan pembulatan bilangan pecahan dengan presisi yang di inginkan
ROUND(123.86,1)=123.9
TRUNC Melakuan pemotongan bilangan pecahan dengan presisi yang dinginkan
TRUNC(123.86,1)=123.8
FLOOR Melakukan pemotongan bilangan yang ada di belakang koma
FLOOR(123.86)=123
CEIL Sama dengan FLOOR, hanya di lakukan pembulatan ke atas
CEIL(123.01)=124
SIGN Memberikan nilai 1 jika bilangan positif dan -1 jika bilangan negatif
SIGN(123)=1 SIGN(-123)=-1
MOD Menampilkan sisa bagi MOD(10,4) = 2
POWER Menampilkan hasil perpangkatan
POWER(2,4)=16
SQRT Menampilkan akar Kuadrat SQRT(16)=4
EXP Menampilkan hasil eksponen EXP(1)=2.7182818
SIN COS TAN
Melakukan perhitungan Trigonometri
COS(0)=1
Note. Untuk mengecek fungsi diatas , gunakan contoh sintak berikut” Select MOD(10,4) from dual. 2.2.1. Fungsi Karakter dan String
Fungsi Keterangan Contoh
LENGTH Memperoleh Panjang String LENGTH(‘ABC’)=3
SUBSTR(s,x,y) Mengambil subtring dari string s, mulai dari posisi x, sebanyak y karakter
SUBSTR(‘ABCD’,2,3)=’BCD’
CONCAT Melakukan Penggabungan string CONCAT(‘A’,’B’)=’AB’
UPPER Mengubah String dari huruf kecil menjadi huruf besar
UPPER(‘ab’)=’AB’
LOWER Mengubah string menjadi kecil LOWER(‘AB’)=’ab’
INITCAP Mengubah huruf pertama dari setiap kata Menjadi huruf Besar
INITCAP(‘ab cd ef’)=’Ab Cd Ef’
2.2.2. Fungsi Konversi
Fungsi Keterangan Contoh
TO_CHAR Mengkonversi nilai string Mengkonversi tanggal ke string
T0_CHAR(123)=’123’
TO_NUMBER Mengkonversi string ke nilai TO_NUMBER(‘123’=123
TO_DATE(STRING, FORMAT_TANGGAL)
Mengkonversi String ke Tanggal
TO_DATE(’21-MAR-1978’,’dd mon yyyy’)=21-MAR-1978
2.2.3. Fungsi Waktu
Fungsi Keterangan Contoh
SYSDATE Menampilkan Tanggal Hari ini
LAST_DAY Menampilkan tanggal terakhir dari bulan yang diberikan
LAST_DAY(1-JAN-02’=31-JAN-02
NEXT_DAY Menampilkan hari dan tangal yang diberikan setelah tanggal yang ditentukan
NEXT_DAY(‘1-AUG-02’,MONDAY’) = 5-AUG-02
MONTHS_BETWEEN Menampilkan Selesih antara dua tanggal
MONTH_BETWEEN(‘1-MAR-02’,’1-JAN-02’=2
Contoh : set serveroutput on set verify off declare
--deklarasi variabel vnomor number(3); --nomor induk karyawan vnama varchar2(20); --nama karyawan vtgl_bekerja date; --tgl. mulai bekerja vgapok number(6); --gaji pokok vgaber number(6); --gaji bersih karyawan
--deklarasi konstanta kbonus constant number(4):=5000; kgaris constant varchar2(40):=LPAD('-', 40, '-');
begin vnomor := SUBSTR('&input_nomor_karyawan',1,3);
SELECT CONCAT(First_name||' ', Last_name), hire_date, Salary INTO vnama, vtgl_bekerja, vgapok FROM Employees
WHERE Employee_id = vnomor; vgaber := vgapok + kbonus; dbms_output.put_line('Data Karyawan'); dbms_output.put_line(kgaris); dbms_output.put_line('No. Karyawan : '||vnomor); dbms_output.put_line('Nama Karyawan : '||vnama); dbms_output.put_line('Tgl. Mulai Bekerja : '||TO_CHAR
(vtgl_bekerja,'dd Month yyyy')); dbms_output.put_line('Gaji Pokok : '||TO_CHAR (vgapok, '$99,999.99')); dbms_output.put_line('Bonus : '||TO_CHAR
(kbonus, '$99,999.99')); dbms_output.put_line(kgaris); dbms_output.put_line('Gaji Bersih : '||TO_CHAR
(vgaber, '$99,999.99')); dbms_output.put_line(kgaris);
Exception when no_Data_found Then dbms_output.put_line('Karyawan No. '||vnomor||' tidak ada..');
End;
3.1. Simple Loop Bentuk dasar perulangan dengan simple loop adalah sebagai berikut : LOOP Pernyataan; ………………………….; ………………………….;
END LOOP; Contoh 1 : Set serveroutput on
declare k integer;
begin k:=1; loop dbms_output.put_line('Baris Ke '|| to_char(k)); k:=k+1; exit when k>5; end loop;
end; Kalau di jalankan output nya adalah sebagai berikut
Contoh 2 :
set serveroutput on declare vnomor number(3):=100; vnama varchar2(30); kgaris constant varchar2(30):=LPAD('-',30,'-'); begin dbms_output.put_line('Data Karyawan'); dbms_output.put_line(kgaris); dbms_output.put_line(RPAD('NIK',5,' ')||RPAD('Nama',15,' '));
PERULANGAN (LOOP)
dbms_output.put_line(kgaris); Loop Select Last_name INTO vnama FROM Employees
where employee_id=vnomor; dbms_output.put_line(RPAD(vnomor,5,' ')||RPAD(vnama,15,' ')); vnomor := vnomor + 1; Exit when vnomor>110; End Loop; dbms_output.put_line(kgaris); End;
3.2. WHILE ... LOOP Bentuk umum perulangan dengan While .. Loop adalah sebagai berikut :
WHILE kondisi LOOP Pernyataan ; Pernyataan ; END LOOP;
Contoh 1 : declare k integer;
begin k:=1; while k<=5 loop dbms_output.put_line('Baris Ke '|| to_char(k)); k:=k+1;
end loop; end;
Output yang dihasilkan sama dengan output pada contoh 1 konsep Simple Loop di atas. Contoh 2 :
set serveroutput on declare
vnomor number(3):=100; vnama varchar2(30); kgaris constant varchar2(30):=LPAD('-',30,'-');
begin dbms_output.put_line('Data Karyawan'); dbms_output.put_line(kgaris); dbms_output.put_line(RPAD('NIK',5,' ')||RPAD('Nama',15,' ')); dbms_output.put_line(kgaris);
while vnomor <= 110 Loop
Select Last_name INTO vnama FROM Employees where employee_id=vnomor;
dbms_output.put_line(RPAD(vnomor,5,' ')||RPAD(vnama,15,' ')); vnomor:=vnomor+1;
End Loop; dbms_output.put_line(kgaris);
End; Output yang dihasilkan sama dengan output pada contoh 2 konsep Simple Loop di atas.
3.3. FOR .. LOOP Perulangan dengan konsep For .. Loop memiliki 2 bentuk, yaitu :
1. For .. Loop yang menggunakan variabel indeks, 2. For .. Loop yang menggunakan subquery.
FOR .. LOOP dengan Variabel Indeks Bentuk umumnya adalah sebagai berikut :
FOR variabel IN indeks_awal..indeks_akhir LOOP Pernyataan; Pernyataan; END LOOP;
Contoh 1 :
declare k integer;
begin for k in 1..5 loop dbms_output.put_line('Baris Ke '|| to_char(k)); end loop; end;
Output yang dihasilkan sama dengan output pada contoh 1 konsep Simple Loop di atas. Contoh 2 :
set serveroutput on declare
vnomor number(3); vnama varchar2(30); kgaris constant varchar2(30):=LPAD('-',30,'-');
begin dbms_output.put_line('Data Karyawan'); dbms_output.put_line(kgaris); dbms_output.put_line(RPAD('NIK',5,' ')||RPAD('Nama',15,' ')); dbms_output.put_line(kgaris);
For vnomor in 100..110 Loop
Select Last_name INTO vnama FROM Employees where employee_id=vnomor;
dbms_output.put_line(RPAD(vnomor,5,' ')||RPAD(vnama,15,' ')); End Loop;
dbms_output.put_line(kgaris); End;
Output yang dihasilkan sama dengan output pada contoh 2 konsep Simple Loop di atas. FOR .. LOOP dengan Subquery Bentuk umumnya adalah sebagai berikut :
FOR variabel IN (Subquery) LOOP Pernyataan; Pernyataan; END LOOP;
Contoh :
set serveroutput on declare
kgaris constant varchar2(30):=LPAD('-',30,'-'); begin
dbms_output.put_line('Data Karyawan'); dbms_output.put_line(kgaris); dbms_output.put_line(RPAD('NIK',5,' ')||RPAD('Nama',15,' ')); dbms_output.put_line(kgaris);
FOR i in (Select Employee_id, Last_name FROM Employees where
employee_id between 100 and 110) Loop dbms_output.put_line(RPAD(i.employee_id,5,' ')||
RPAD(i.last_name,15,' ')); End Loop; dbms_output.put_line(kgaris);
End; Output yang dihasilkan sama dengan output pada contoh 2 konsep Simple Loop di atas.
4.1. Logika IF Logika percabangan untuk menyatakan decision/pilihan terdiri dari :
1. IF dengan 1 kondisi 2. IF dengan 2 kondisi 3. IF dengan banyak kondisi
IF dengan 1 kondisi Bentuk umum lofika IF dengan 1 kondisi adalah sebagai berikut :
IF kondisi THEN Pernyataan; END IF;
Contoh :
set serveroutput on set verify off declare
vnomor number(3); vnama varchar2(10); vbonus real;
begin vnomor := '&input_nomor_karyawan'; select last_name, commission_pct into vnama, vbonus from employees where employee_id = vnomor; dbms_output.put_line('No. Karyawan : '||vnomor); dbms_output.put_line('Nama Karyawan : '||vnama); --memeriksa nilai dari variabel vbonus if vbonus is null then dbms_output.put_line('Tidak mendapatkan bonus'); end if;
end; Hasil yang diperoleh (input nomor karyawan : 100
PERCABANGAN (DECISION)
Contoh 2 set serveroutput on declare
vket varchar2(30):=''; vgaris varchar2(50):=LPAD('-',50,'-');
begin dbms_output.put_line('Data Bonus Karyawan'); dbms_output.put_line(vgaris); dbms_output.put_line(rpad('Nama',27,' ')|| Rpad('Bonus',5,' ')||vket); dbms_output.put_line(vgaris); for i in
(select last_name, commission_pct as bonus from employees where last_name like 'A%') loop
if i.bonus is not null then vket:='-->mendapat bonus';
end if; dbms_output.put_line(rpad(i.last_name,25,' ')|| lpad(to_char(i.bonus,'0.99'),5,' ')||' '||vket); vket:='';
end loop; dbms_output.put_line(vgaris);
end; Kalau Statement di atas di jalankan maka outputnya adalah:
IF dengan 2 Kondisi Bentuk umum lofika IF dengan 2 kondisi adalah sebagai berikut :
IF kondisi THEN Pernyataan A; Else Pernyataan B; END IF;
Contoh set serveroutput on declare
vket varchar2(30):=''; vgaris varchar2(50):=LPAD('-',50,'-');
begin dbms_output.put_line('Data Bonus Karyawan'); dbms_output.put_line(vgaris); dbms_output.put_line(rpad('Nama',27,' ')|| Rpad('Bonus',5,' ')||vket); dbms_output.put_line(vgaris); for i in
(select last_name, commission_pct as bonus from employees where last_name like 'A%')loop
if i.bonus is not null then vket:='-->mendapat bonus'; else vket:='-->tidak mendapat bonus'; end if;
dbms_output.put_line(rpad(i.last_name,25,' ')|| lpad(to_char(i.bonus,'0.99'),5,' ')||' '||vket);
vket:=''; end loop; dbms_output.put_line(vgaris);
end;
IF dengan Banyak Kondisi Bentuk umum lofika IF dengan 2 kondisi adalah sebagai berikut :
IF kondisi_1 THEN Statemen A; ELSE IF( KONDISI_2) THEN Statemen B; ELSE Statemen C; END IF; END IF;
Contoh 1
set serveroutput on declare
vket varchar2(100); vgaris varchar2(80):=LPAD('-',80,'-');
begin dbms_output.put_line('Data Bonus Karyawan'); dbms_output.put_line(vgaris); dbms_output.put_line(rpad('Nama',25,' ') || rpad('Lama Kerja',10,' ')
||vket); dbms_output.put_line(vgaris); for i in (select last_name, round((sysdate-hire_date)/365,0) as lama_kerja from employees where department_id between 10 and 40)loop
if i.lama_kerja >= 24 then vket:='-->mendapat bonus jalan-jalan ke eropa'; else if i.lama_kerja>= 22 then vket:='-->mendapat bonus jalan-jalan ke Bali'; else vket:='-->mendapat bonus 1 bulan gaji' ; end if; end if;
dbms_output.put_line(rpad(i.last_name,25,' ')||rpad(i.lama_kerja||
' tahun',10,' ')||vket); vket:='';
end loop; dbms_output.put_line(vgaris);
end;
4.2. Logika CASE Bentuk umum penggunaan logika CASE adalah sebagai berikut : CASE WHEN ekspresi_1 THEN pernyataan_1; WHEN ekspresi_2 THEN pernyataan_2; …. Else Pernyataan_alternatif;
END CASE; Contoh Implementasi dengan statemen case
set serveroutput on declare vket varchar2(100); vgaris varchar2(80):=LPAD('-',80,'-'); begin
dbms_output.put_line('Data Bonus Karyawan'); dbms_output.put_line(vgaris); dbms_output.put_line(rpad('Nama',25,' ') || rpad('Lama Kerja',10,' ') ||vket); dbms_output.put_line(vgaris); for i in (select last_name, round((sysdate-hire_date)/365,0) as lama_kerja from employees where department_id between 10 and 40)loop case when i.lama_kerja >= 24 then vket:='-->mendapat bonus jalan-jalan ke eropa'; when i.lama_kerja>= 22 then vket:='-->mendapat bonus jalan-jalan ke Bali'; else vket:='-->mendapat bonus 1 bulan gaji' ; end case; dbms_output.put_line(rpad(i.last_name,25,' ')||rpad(i.lama_kerja||
' tahun',10,' ')||vket); vket:=''; end loop; dbms_output.put_line(vgaris);
end; Output yang diperoleh sama dengan output dari hasil perintah menggunakan logika IF.