Oleh : Siti Nuraini Triastuti 11120041 Santi Dewi Putri .S. 11120037 Dewi Rahayuningsih 11120058
Fakultas Teknik Program Studi Teknik Informatika Universitas Wijaya Kusuma Surabaya 2014 TUJUAN 1. Mahasiswa mengerti tentang penggunan Procedure dan Function. 2. Mahasiswa memahami pengguanan Procedure dan Function. 3. Mahasiswa mampu menerapkan penggunaan Procedure dan Function.
PENDAHULUAN
STORED PROCEDURES Stored Procedures merupakan modul dari PL/SQL yang memiliki kemampuan menerima parameter input, melakukan pengolahan terhadap parameter input tersebut lalu menampilkannya. Stored Procedures dapat memiliki parameter input ataupun tidak memiliki parameter. Parameter pada stored procedures dapat berupa input, output maupun gabungan input dan output. Seperti halnya blok non- modular PL/SQL, stored procedures mampu menangani pesan kesalahan yaitu dengan Exception Handling. Stored Procedures dapat berdiri sendiri , digunakan bersama dengan stored procedures lainnya maupun digunakan dengan Stored Functions. Pada exercise workbook ini mahasiswa akan mempelajari dan melakukan praktikum untuk membuat, menghapus, merubah stored procedures baik dengan menggunakan parameter maupun tanpa menggunakan parameter. Parameter pada stored procedure ada 3 yaitu : - IN, digunakan untuk menerima dan menyimpan nilai inputan dari luar stored procedures - OUT, digunakan untuk menyimpan nilai hasil proses dari stored procedures yang akan ditampilkan - INOUT, dapat berfungsi sebagai IN dan OUT Stored Procedures sangat berguna ketika diterapkan pada aplikasi karena memudahkan pembuat program untuk melakukan perbaikan ketika ditemukan suatu kesalahan pada program yang dibuatnya.
Aturan Penulisan Stored Procedures
- Kalimat CREATE PROCEDURE bertujuan untuk membuat sebuah stored procedures pada PL/SQL. - [OR REPLACE] digunakan jika pembuat program akan melakukan perubahan pada stored procedure yang telah dibuat - Procedure_name merupakan nama dari stored procedure yang dibuat - parameter merupakan nama parameter dari stored procedure - [mode] merupakan jenis dari parameter apakah IN, OUT atau INOUT - Datatype merupakan tipe data, dapat berupa tipe data skalar maupun tipe data reference - IS | AS merupakan tanda pemisah antara header stored procedure dan isi dari stored procedure, gunakan salah satu saja - [local_variable_declarations;] berisikan variabel-variabel lokal dari stored procedure sebagaimana variable-variabel pada blok non-modular PL/SQL - BEGIN merupakan tanda awal dari isi proses PL/SQL - --actions; berisikan baris-baris koding PL/SQL dapat berupa runtunan, pemilihan, perulangan maupun perintah DML. - END [procedure_name]; merupakan tanda akhir dari struktur stored procedures yang di buat, dapat juga ditambahkan pada baris selanjutnya tanda garis miring /. Fungsi Stored Procedure Keuntungan menggunakan stored Procedure (menyimpan kode program di database) dibandingkan dengan menyimpan kode program di aplikasi adalah : 1. Pemrograman menjadi lebih modular 2. Mengurangi lalu lintas jaringan 1. Dapat digunakan untuk mekanisme keamanan basis data
STORED FUNCTIONS Stored Functions merupakan modul dari PL/SQL yang dapat mempermudah melakukan pengolahan suatu nilai dan mengembalikan nilai tertentu. Konsep dari Stored Functions mirip dengan konsep Stored Procedures, tetapi stored functions harus mengembalikan suatu nilai. Aturan Penulisan Stored Functions
- Kalimat CREATE FUNCTION bertujuan untuk membuat sebuah stored function pada PL/SQL. - [OR REPLACE] digunakan jika pembuat program akan melakukan perubahan pada stored function yang telah dibuat - Procedure_name merupakan nama dari stored procedure yang dibuat - parameter merupakan nama parameter dari stored function - [mode] merupakan jenis dari parameter apakah IN, OUT atau INOUT - Datatype merupakan tipe data, dapat berupa tipe data skalar maupun tipe data reference - RETURN datatype berfungsi sebagai deklarasi untuk mengembalikan tipe data tertentu. Tipe data disini harus tanpa ada keterangan panjang karakter/digit angka. - IS | AS merupakan tanda pemisah antara header stored function dan isi dari stored function, gunakan salah satu saja - [local_variable_declarations;] berisikan variabel-variabel lokal dari stored function sebagaimana variable-variabel pada blok non-modular PL/SQL - BEGIN merupakan tanda awal dari isi proses PL/SQL - --actions; berisikan baris-baris koding PL/SQL dapat berupa runtunan, pemilihan, perulangan maupun perintah DML. - RETURN expression mengembalikan nilai suatu variabel tertentu yang akan ditampilkan - END [function_name]; merupakan tanda akhir dari struktur stored function yang di buat, dapat juga ditambahkan pada baris selanjutnya tanda garis miring /.
PERCOBAAN Pembuatan Function dan procedure pada Oracle dan SQL ORACLE Soal : 1.Buat store procedure untuk mencari nama mahasiswa pada prodi tertentu, dengan input statis dari kode prodi yang terdapat di dalam procedure. 2.Buat store procedure untuk mencari nama mahasiswa pada prodi tertentu, dengan input dinamis dari kode prodi yang diinputkan ketika menjalankan procedure tersebut. Penyelesaian : 1. Buat table dengan nama prodi dengan query : Create table prodi(kode_prodi varchar(10) not null constrait kode_prodi primary key, nama_prodi varchar(20),jurusan varchar(20));
Select*from prodi
Hasil yang ditampilkan :
Selanjutnya buat tabel dengan nama mahasiswa1 dengan query : create table mahasiswa1 (nim1 int constraint nim1 primary key not null, nama varchar(20), alamat varchar(25), kode_prodi varchar(10) references prodi(kode_prodi));
Select*from mahasiswa1
Hasil yang ditampilkan :
Menampilkan nama dari tabel mahasiswa1 yang memiliki kode_prodi=P01
Hasil yang ditampilkan :
Buat procedure untuk mendapatkan data mahasiswa pada prodi P01(P01 didalam bagian code procedure). Dengan query : Create or replace procedure cari_nama1 (kode_prodi1 in mahasiswa1.kode_prodi% TYPE) is vnama mahasiswa1.nama%type; BEGIN Select mahasiswa1.nama into vnama from mahasiswa1 where mahasiswa1.kode_prodi=kode_prodi1; dbms_output.put_line(kode_prodi=||kode_prodi1); dbms_output.put_line(nama=||vnama); end; execute cari_nama1(P01); set serveroutput on;
Hasil yang ditampilkan : nama dari mahasiswa dengan kode prodi P01
2. Buat procedure untuk mendapatkan data Nama dan alamat mahasiswa pada prodi P01(P01 diinputkan ketika memanggil procedure).dengan query : Create or replace procedure cari_alamat (kode_prodi1 in mahasiswa1.kode_prodi% TYPE) is Vnama mahasiswa1.alamat%type; BEGIN Select mahasiswa1.nama, mahasiswa1.alamat into vnama,valamat From mahasiswa1 Where mahasiswa1.kode_prodi=kode_prodi1; Dbms_oputput.put_line(kode_prodi=||kode_prodi1); Dbms_oputput.put_line(nama=|| vnama); Dbms_oputput.put_line(alamat=||valamat); End; Set serveroutput on; Execute cari_alamat(P01);
Hasil yang di tampilkan : nama dan alamat dari mahasiswa dengan kode prodi P01
TUGAS TAMBAHAN Soal: 1.Buat 4 Function dan 4 Procedure pada SQL dan ORACLE di Project Rental Mobil ORACLE 1. Buat Procedure Function untuk menambahkan datacustomer dengan nama sp_insert_customer.Dengan id=246,nama=eny, alamat=jln jambangan palm spring, no ktp=6745280099121100, no tlp=081217332599 dan id jaminan=525. Dengan query : Create or replace prcedure sp_insert_customer (vid_customer in datacustomer.id_customer%TYPE, vnama_customer in datacustomer.nama_customer%TYPE, valamat_customer in datacustomer.alamat_customer%TYPE, vno_ktp in datacustomer.no_ktp%TYPE, vno_tlp in datacustomer.no_tlp%TYPE, vid_jaminan in datacustomer.id_jaminan%TYPE) as begin insert into datacustomer (id_customer,nama_customer,alamat_customer, no_ktp,no_tlp,id_jaminan) values(vid_customer,vnama_customer,valamat_customer,vno_ktp,vno_tlp, vid_jaminan); end; execute sp_insert_customer(246,eny,jln jambangan palm spring,6745280099121100,081217332599,525);
select* from datacustomer
Hasil yang ditampilkan :
2. Buat Procedure Function untuk menambahkan datapegawai nama sp_insert_datapegawai.Dengan id_pegawai=1138, nama_pegawai= riyadi, alamat_pegawai= jln karah agung no 18, no_ktp=2231664578909700, no_tlp=085232314333, jenis_kelamin=supir.Dengan query : Create or replace procedure sp_insert_datapegawai (vid_pegawai in datapegawai.id_pegawai%TYPE, vnama_pegawai in datapegawai.nama_pegawai%TYPE, valamat_pegawai in datapegawai.alamat_pegawai%TYPE, vno_ktp in datapegawai.no_ktp%TYPE, vno_tlp in datapegawai.no_tlp%TYPE, vjenis_pekerjaan in datapegawai.jenis_pekerjaan%TYPE) as begin insert into datapegawai(id_pegawai, nama_pegawai, alamat_pegawai, no_ktp, no_tlp, jenis_pekerjaan) values(vid_pegawai, vnama_pegawai, valamat_pegawai, vno_ktp,vno_tlp, vjenis_pekerjaan); end; execute sp_insert_datapegawai (11138,riyadi,jln karah agung no 18,2231664578909700,085232314333,supir);
select * from datapegawai
Hasil yang ditampilkan :
3. Buat Procedure Function untuk menghapus datapegawai yang sudah ada di datapegawai dan data yang akan dihapus dari id_pegawai=1131 . Dengan query : Create or replace procedure sp_delete_datapegawai (vid_pegawai in int) as begin delete from datapegawai where id_pegawai=vid_pegawai; End; Execute sp_delete_datapegawai(1131);
Hasil yang ditampilkan : pegawai dengan id=1131 telah terhapus dari datapegawai
4. Buat Procedure Function untuk menghapus datacustomer yang sudah ada di datacustomer dan data yang akan dihapus dari id_customer=221. Dengan query : Create or replace procedure sp_delete_datacustomer (vid_customer in varchar) as begin delete from datacustomer where id_customer=vid_customer; end; execute sp_delete_datacustomer(221);
Hasil yang ditampilkan : Customer dengan id=221 telah terhapus dari datacustomer
5. Buat Procedure Function untuk mengupdate datapegawai . Dengan query : Create or replace procedure sp_update_datapegawai(p_id_pegawai in int, p_nama_pegawai in varchar, p_alamat_pegawai in varchar, p_no_ktp in varchar, p_no_tlp in varchar, p_jenis_pekerjaan in varchar) as begin update datapegawai set id_pegawaih
Select * from datapegawai
Hasil yang di tampilkan :
6. Buat function get_pegawai. Dengan query : Create or replace function get_pegawai (idp in int) Return varchar Is nama varchar(30); begin select nama_pegawai into nama from datapegawai where id_pegawai=idp; return(nama); end; set autoprint on var get varchar2; execute :get :=get_pegawai(1112);
Hasil yang ditampilkan :
7. Mencari customer dengan memasukkan id_customer (223). Dengan query : Create or replace function get_customer (idp in int) Return varchar Is nama varchar(35); Begin Select nama_customer into nama from datacustomer where id_customer=idp; Return(nama); End; Set autoprint on Var get varchar2; Execute :get := get_customer(223);
Hasil yang ditampilkan :
8. Buat function total dengan nama jumlah_harga_sewa. Degan query : create or replace function jumlah_harga_sewa (id in int) return sys_refcursor is jumlah sys_refcursor; begin open jumlah for select sum(harga_sewa*lama_sewa) from dataperoidesewa where id_sewa=id; return jumlah; end; var x refcursor; exec :x := jumlah_harga_sewa(23); print x;
Hasil yang ditampilkan :
9. Buat function total dengan nama jumlah sewa. Dengan query : Create or replace function jumlah_sewa (id in int) Return sys_refcursor Is Jumlah sys_refcursor; Begin Open jumlah For select sum (total*jumlah) from transaksi where id_transaksi=id; Return jumlah; End; Var x refcursor; Exec :x := jumlah_sewa(405); Print x;
Hasil yang ditampilkan :
SQL 1. Buat Function dengan nama get_customer untuk melihat customer dengan id 223. Dengan query : create function get_customer ( @nama varchar(35) ) as return ( select * from datacustomer where id_customer like% + @nama + % ) go select * from get customer (223)
Hasil yang ditampilkan :
2. Buat function untuk mencari pegawai dari no id_pegawai. Dengan query : create function get_pegawai ( @nama varchar (30) ) returns TABLE as return ( select * from datapegawai where id_pegawai like% + @nama + % ) go select * from get_pegawai (1112)
Hasil yang di tampilkan :
3. Buat function untuk melihat harga dengan nama jumlah_harga_sewa. Dengan query : create function jumlah_harga_sewa ( @id int ) RETURNS @resultTable TABLE ( harga_sewa int ) as begin insert @resultTable ( harga_sewa ) select sum (harga_sewa * lama_sewa) from dataperiodesewa where id_sewa=@id return end go select * from jumlah_harga_sewa (23)
Hasil yang ditampilkan :
4. Buat function dengan nama jumlah_sewa . Dengan query : create function jumlah_sewa ( @id int ) returns @resultTable TABLE ( jumlah int, total int ) as begin insert @resultTable ( jumlah , total ) select count (id_transaksi), sum (jumlah*total) from transaksi where id_transaksi=@id return end go select * from jumlah_sewa (405)
Hasil yang ditampilkan :
5. Buat procedure untuk menambahkan data customer dengan nama sp_customer. Dengan query : Create procedure sp_insert_customer @id_customer int, @nama_customer varchar(30), @alamat_customer varchar(30), @no_ktp varchar(30), @no_tlp varchar(30), @id_jaminan int As Begin Insert into datacustomer (id customer, nama_customer, alamat_customer, no_ktp, no_tlp, id_jaminan) Values (@id_customer,@nama_customer,@alamat_customer,@no_ktp,@no_tlp, @id_jaminan) End
6. Buat procedure untuk menambahkan data pegawai dengan nama sp_insert_datapegawai. Dengan query : Create procedure sp_insert_datapegawai @id_pegawai int, @nama_pegawai varchar(20), @alamat_pegawai varchar(30), @no_ktp varchar(30), @no_tlp varchar(30), @jenis_pekerjaan varchar(30) As Begin Insert into datapegawai (id_pegawai, nama_pegawai, alamat_pegawai, no_ktp, no_tlp, jenis_pekerjaan) Values (@id_pegawai,@nama_pegawai,@alamat_pegawai,@no_ktp,@no_tlp,@ jenis_pekerjaan) End Go
Execute sp_insert_datapegawai @id_pegawai=11138, @nama_pegawai=riyadi @alamat_pegawai=jln.karah agung no 18, @no_ktp=2231664578909700, @no_tlp=085232314333, @jenis_pekerjaan=supir Select * from datapegawai
Hasil yang ditampilkan :
7. Buat procedure dengan nama sp_update_datapegawai. Dengan query : Create procedure sp_update_datapegawai @id_pegawai int, @nama_pegawai varchar(20), @alamat_pegawai varchar(20), @no_ktp varchar(20), @no_tlp varchar(20), @jenis_pekerjaan varchar(20) As begin Update datapegawai set Id_pegawai=@id_pegawai,nama_pegawai=@nama_pegawai, alamat_pegawai=@alamat_pegawai, no_ktp=@no_ktp, no_tlp=@no_tlp, jenis_pekerjaan=@jenis_pekerjaan Where id_pegawai=@id_pegawai; End
Execute sp_update_datapegawai @id_pegawai=1112, @nama_Pegawai=chili, @alamat_pegawai=jln ahmad yani, @no_ktp=2311990044878977, @no_tlp=085253465633, @jenis_pekerjaan=kasir Select * from datapegawai
Hasil yang ditampilkan :
8. Buat procedure untuk mendelete datapegawai dari id_pegawai dengan nama sp_delete_datapegawai. Dengan query :
Create procedure sp_delete_datapegawai ( @id_pegawai int ) As begin transaction Delete from datapegawai where id_pegawai=@id_pegawai If @@ERROR <>0 Begin Rollback transaction End Else Begin Commit transaction End Go
Execute sp_delete_datapegawai @id_pegawai=11131 Select * from datapegawai
Hasil yang ditampilkan :
KESIMPULAN
Function dan Stored Procedure merupakan perintah-perintah yang memudahkan kita untuk bisa memberi suatu pesan dan memudahkan kita untuk bisa menyusun query dengan benar.