Materi Dasar Oracle-v1

29
Materi 1 Relational Database dan RDBMS Sebelum membahas berbagai jenis perintah SQL akan lebih baik kalau kita bicara tentang Relational Database dan Relational Database Management System atau biasa dikenal dengan RDBMS. Relational Database sebenarnya adalah salah satu konsep penyimpanan data, sebelum konsep database relasional muncul sebenarnya sudah ada dua model database yaitu Network Database dan Hierarchie Database. Dalam database relasional, data disimpan dalam bentuk relasi atau tabel dua dimensi, dan antar tabel satu dengan tabel lainnya terdapat hubungan atau relationship, sehingga sering kita baca diberbagai literatur, database didefinisikan sebagai “kumpulan dari sejumlah tabel yang saling hubungan atau keterkaitan”. Nah, kumpulan dari data yang diorganisasikan sebagai tabel tadi disimpan dalam bentuk data elektronik di dalam hardisk komputer. Untuk membuat struktur tabel, mengisi data ke tabel, mengubah data jika diperlukan dan menghapus data dari tabel diperlukan software. Software yang digunakan membuat tabel, isi data, ubah data dan hapus data disebut Relational Database Management System atau dikenal dengan singkatan RDBMS sedangkan perintah yang digunakan untuk membuat tabel, isi, ubah dan hapus data disebut perintah SQL yang merupakan singkatan dari Structure Query Language. Jadi, setiap software RDBMS pasti bisa digunakan untuk menjalankan perintah SQL. Sebenarnya fungsi RDBMS bukan cuma buat tabel, isi data, ubah dan hapus data, untuk manajemen data dalam skala besar dan agar bisa mendukung proses bisnis yang kontinyu dan real time suatu RDBMS dituntut untuk mempunyai kemampuan manajemen user dan keamanan data, backup dan recovery data serta kemampuan lainnya yang berkaitan dengan kecepatan pemrosesan data (performance).

description

basic for beginner learning oracle

Transcript of Materi Dasar Oracle-v1

Page 1: Materi Dasar Oracle-v1

Materi 1

Relational Database dan RDBMSSebelum membahas berbagai jenis perintah SQL akan lebih baik kalau kita bicara tentang Relational Database dan Relational Database Management System atau biasa dikenal dengan RDBMS.

Relational Database sebenarnya adalah salah satu konsep penyimpanan data, sebelum konsep database relasional muncul sebenarnya sudah ada dua model database yaitu Network Database dan Hierarchie Database. Dalam database relasional, data disimpan dalam bentuk relasi atau tabel dua dimensi, dan antar tabel satu dengan tabel lainnya terdapat hubungan atau relationship, sehingga sering kita baca diberbagai literatur, database didefinisikan sebagai “kumpulan dari sejumlah tabel yang saling hubungan atau keterkaitan”. Nah, kumpulan dari data yang diorganisasikan sebagai tabel tadi disimpan dalam bentuk data elektronik di dalam hardisk komputer. Untuk membuat struktur tabel, mengisi data ke tabel, mengubah data jika diperlukan dan menghapus data dari tabel diperlukan software. Software yang digunakan membuat tabel, isi data, ubah data dan hapus data disebut Relational Database Management System atau dikenal dengan singkatan RDBMS sedangkan perintah yang digunakan untuk membuat tabel, isi, ubah dan hapus data disebut perintah SQL yang merupakan singkatan dari Structure Query Language. Jadi, setiap software RDBMS pasti bisa digunakan untuk menjalankan perintah SQL.

Sebenarnya fungsi RDBMS bukan cuma buat tabel, isi data, ubah dan hapus data, untuk manajemen data dalam skala besar dan agar bisa mendukung proses bisnis yang kontinyu dan real time suatu RDBMS dituntut untuk mempunyai kemampuan manajemen user dan keamanan data, backup dan recovery data serta kemampuan lainnya yang berkaitan dengan kecepatan pemrosesan data (performance).

Salah satu software RDBMS yang ada dipasaran saat ini dan cukup banyak digunakan adalah Oracle Database.

Berinteraksi dengan Database Oracle

Untuk mengakses data yang ada di database digunakan perintah SQL, perintah-perintah SQL ini ditulis atau diinput dengan tools yang sudah disediakan oleh Oracle yaitu SQL*PLus, iSQL*Plus dan SQL Developer.Perintah SQL dikelompokkan berdasarkan fungsinya sebagai berikut:

Perintah untuk pendefinisian/pembuatan objek (Data Definition Language / DDL)

CREATE ALTER RENAME

Page 2: Materi Dasar Oracle-v1

DROP TRUNCATE

Perintah untuk menampilkan data (Data Retrieval)

SELECT

Perintah untuk memanipulasi data (Data Manipulation Language /DML)

INSERT UPDATE DELETE MERGE

Perintah untuk mengontrol transaksi (Transaction Control Language /TCL)

COMMIT ROLLBACK SAVEPOINT

Perintah untuk mengatur wewenang atau privilege ( Data Control Language /DCL)

GRANT REVOKE

Sekian bahasan tentang Relational Database dan RDBMS.

Materi selanjutnya, Materi 2 : Membuat Konsep User dan Schema

Terima kasih

Page 3: Materi Dasar Oracle-v1

Materi 2

User dan Schema DatabaseKonsepSetiap orang yang akan mengakses ke suatu database Oracle harus memiliki database user account atau biasa dikenal dengan user name. Pada database Oracle, user ada didalam database artinya user merupakan bagian dari suatu database. Berbeda dengan konsep user yang ada di database lain seperti MySQL atau SQL Server 2000, pada kedua database tersebut user ada diluar database. Ilustrasi perbedaan konsep user antara database Oracle dengan database MySQL atau SQL Server 2000 bisa dilihat pada gambar berikut:

Page 4: Materi Dasar Oracle-v1

Jadi agar user bisa mengakses ke database database dibuat dulu user account-nya. User yang berhak membuat user account adalah user SYS atau user SYSTEM. User SYS dan SYSTEM adalah user yang sudah ada di dalam database dan mempunyai wewenang untuk melakukan administrasi database. User SYS dan SYSTEM dibuat bersamaan dengan proses membuat database. Jadi begitu anda selesai membuat database atomatis sudah ada user SYS dan SYSTEM.

Perhatikan lagi gambar diatas, dalam satu database akan terdapat banyak user dan setiap user akan mempunyai banyak objek seperti tabel, indek, trigger, procedure dan function. Pengelompokan objek-objek secara logik di dalam database berdasarkan user pemiliknya disebut schema. Jadi setiap user pasti punya schema, schema atomatis terbentuk ketika user dibuat. Satu user hanya dihubungkan ke satu schema dan nama user sama dengan nama schema. Berarti user dan schema adalah hal yang sama.

Pemahaman lebih kanjut, secara logik user atau schema di database Oracle sebenarnya sama dengan apa yang disebut database di My SQL atau SQL Server 2000.

Kapan kita harus membuat user atau schema ?. Berdasarkan konsep diatas, user dan schema dibuat ketika ingin membangun suatu aplikasi. Sebagai contoh, ketika Anda ingin membuat aplikasi Sistem Informasi Kepegawaian atau HRD sebaiknya buat user atau schema dengan nama HRD (Masalah nama schema terserah Anda, tetapi sebaiknya mencerminkan nama aplikasi). Selanjutnya semua tabel dan object database lain yang berkaitan dengan aplikasi Sistem Informasi Kepegawaian akan di simpan di schema HRD.

Membuat User/Schema

Ingat, tadi sudah disebutkan bahwa yang berhak untuk membuat user adalah user SYS atau SYSTEM atau user yang sudah diberi privilege untuk CREATE USER (tentang privilige akan dibahas tersendiri). Lakukan koneksi ke database sebagai user SYS.

1. Pada form login SQL*Plus, ketik sebagai berikut:

atau pada prompt SQL> ketik :

SQL> connect / as sysdbaConnected.

2. Buat user/schema HRD dengan password ORACLE

SQL> CREATE USER hrd 2 IDENTIFIED BY oracle 3 DEFAULT TABLESPACE users 4 QUOTA 10 M ON users;

3. Beri ijin user HRD untuk login ke database, buat tabel dan buat index

SQL> GRANT CREATE SESSION,

Page 5: Materi Dasar Oracle-v1

2 CREATE TABLE, 3 CREATE INDEXTYPE 4 TO hrd;

4. Lakukan koneksi ke database menggunakan user account BUDI

SQL> CONNECT hrd Enter password: ****** Connected.SQL> show user USER is “HRD”

Materi User dan Schema selesai, Terima kasih.

Materi selanjutnya adalah Materi 3 : Membuat Tabel dan Mendefinisikan Constraint

Page 6: Materi Dasar Oracle-v1

Materi 3

Membuat Tabel dan Mendefinisikan ConstraintPrasyarat :

Instalasi Software Oracle database sudah berhasil, jika belum silahkan install dengan mengikuti petunjuk Instalasi Oracle Database

Anda sudah membuat database Oracle, jika belum buat database dengan mengikuti petunjuk Membangun Database

Sebaiknya anda baca Materi 2 tentang User dan Schema

Membuat Tabel

Ingat, di materi 2 Anda sudah membuat user/schema HRD. Disini kita akan coba membuat dua tabel sederhana untuk menyimpan data-data pegawai yaitu tabel BAGIAN dan tabel PEGAWAI. Rancangan tabel dibuat seperti berikut :

Login ke database sebagai user HRD.

SQL> CONNECT budiEnter password: ******Connected.

Buat tabel PEGAWAI dan BAGIAN

SQL> CREATE TABLE PEGAWAI

Page 7: Materi Dasar Oracle-v1

2 NIP NUMBER(4)3 NAMA VARCHAR2(15),4 JK CHAR(1),5 EMAIL VARCHAR2(20),6 GAJI NUMBER(10),7 KODE_BAG NUMBER(2));SQL> CREATE TABLE BAGIAN2 (KODE NUMBER(2),3 NAMA_BAGIAN VARCHAR2(20));

Mendefinisikan Constraint

Constraint adalah batasan atau ketentuan yang diterapkan di tabel untuk menjaga konsistensi dan integritas data. Ada 5 jenis constraint di Oracle, yaitu :

Primary Key Unique Not Null Check Foreign Key

Penggunaan dan cara mendefinisikan constraint adalah sebagai berikut:

Primary key

Defenisikan kolom NIP pada tabel PEGAWAI sebagai primary key.

SQL> ALTER TABLE PEGAWAI 2 ADD CONSTRAINT PK_PEGAWAI PRIMARY KEY (nip);

Defenisikan kolom KODE pada tabel BAGIAN sebagai primary key.

SQL> ALTER TABLE BAGIAN 2 ADD CONSTRAINT PK_BAGIAN PRIMARY KEY (kode);

Not Null

Definisikan kolom NAMA pada tabel PEGAWAI harus selalu diisi (Not Null)

SQL> ALTER TABLE PEGAWAI 2 MODIFY nama NOT NULL;

Check

Definisikan kolom JK (jenis kelamin) pada tabel PEGAWAI hanya boleh diisi oleh ‘L’ dan ‘P’

SQL> ALTER TABLE PEGAWAI 2 ADD CONSTRAINT ck_jk CHECK (JK IN (’L’,’P’));

Page 8: Materi Dasar Oracle-v1

Pastikan kolom GAJI pada tabel PEGAWAI minimal 1000000

SQL> ALTER TABLE PEGAWAI 2 ADD CONSTRAINT ck_gaji_1jt CHECK (GAJI >= 1000000);

Unique

Pastikan data untuk kolom EMAIL pada tabel PEGAWAI tidak boleh ada yang sama (Unique)

SQL> ALTER TABLE PEGAWAI 2 ADD CONSTRAINT UQ_EMAIL UNIQUE(email);

Foreign Key

Definisikan agar kolom KODE_BAG pada tabel PEGAWAI selalu merujuk ke kolom KODE pada tabel BAGIAN. (pendefinisian Foreign Key)

SQL> ALTER TABLE PEGAWAI 2 ADD CONSTRAINT fk_kode_bag FOREIGN KEY (kode_bag) 3* REFERENCES bagian(kode);

Bahasan Create table dan Constraint selesai…….

Page 9: Materi Dasar Oracle-v1

Materi 4

Input Data ke dalam TabelPrasyarat :

Anda sudah membaca dan menjalankan perintah-perintah yang ada di Materi 3 tentang Membuat Tabel dan Mendefinisikan Constraint

Perintah INSERT

Untuk mengisi data ke tabel digunakan perintah INSERT. Syntax perintah INSERT adalah sebagai berikut :

INSERT INTO table [(column [, column…])]VALUES (value [, value…]);

Sebelum melakukan pengisian data dengan perintah INSERT, kita harus lihat dulu strukutr tabel yang akan kita isi, karena urutan kolom dalam perintah INSERT sangat penting.

Lakukan koneksi ke database dengan user HRD

SQL> connect hrdEnter password: ******Connected.

Lihat, tabel apa saja yang dimiliki oleh user HRD

SQL> SELECT table_name2 FROM user_tables;TABLE_NAME------------PEGAWAIBAGIAN

Lihat struktur tabel BAGIAN dan PEGAWAI

SQL> desc BAGIANName Null? Type----------------- -------- ------------KODE NUMBER(2)NAMA_BAGIAN VARCHAR2(20)

SQL> desc PEGAWAIName Null? Type----------------- -------- ------------NIP NUMBER(4)NAMA VARCHAR2(15)

Page 10: Materi Dasar Oracle-v1

JK CHAR(1)EMAIL VARCHAR2(20)GAJI NUMBER(10)KODE_BAG NUMBER(2)

Input data dengan urutan kolom sesuai dengan struktur tabel

Isi tabel BAGIAN dengan data kode : 10, nama_bagian : ADMINISTRATION

SQL> INSERT INTO bagian(kode,nama_bagian) VALUES(10,’ADMINISTRASI’);1 row created.

Sebenarnya jika kita akan memasukkan data dan kita sudah mengetahui struktur tabelnya dan data tersebut akan diinput urut sesuai nama kolom, maka nama kolom tidak perlu disebutkan. Dengan demikian maka penulisan perintah INSERT menjadi lebih sederhana, seperti dibawah ini :

SQL> INSERT INTO bagian VALUES(20,’MARKETING’);1 row created.

Input data untuk kolom tertentu saja

Nama kolom perlu disebutkan jika kita akan mengisi nilai hanya ke beberapa kolom saja. Misalkan isi data PEGAWAI untuk kolom NIP: 100 NAMA: ‘EDWIN’, maka perintah INSERT ditulis sebagai berikut:

SQL> INSERT INTO pegawai (nip,nama) VALUES(100,’ANTON’);1 row created.

Untuk kolom lain pada baris tersebut akan diisi dengan NULL(kosong).

Jika kita lihat, dengan menggunakan perintah INSERT untuk menginput satu baris data diperlukan satu perintah INSERT. Sebenarnya masih ada beberapa utility lain di Oracle yang bisa digunakan untuk memasukkan data ke tabel seperti External Table, SQL*Loader dan Data Pump. Utility itu nanti akan dibahas pada bagian tersendiri.

Untuk latihan dan nanti akan digunakan untuk materi selanjutnya, isi tabel BAGIAN dan PEGAWAI dengan data berikut :

-- isi tabel BAGIANinsert into bagian values(10,'Administrasi');insert into bagian values(11,'Penjualan');insert into bagian values(12,'Gudang');

-- isi data pegawaiinsert into pegawai values(1000,'WIRA', 'L',null,7000000,10);insert into pegawai values(1100,'BUDI', 'L',null,5000000,12);insert into pegawai values(1200,'ERTIN', 'P',null,4250000,10);insert into pegawai values(1300,'NOVI', 'P',null,5500000,11);

Page 11: Materi Dasar Oracle-v1

insert into pegawai values(1201,'AHMAD', 'L',null,2575000,10);insert into pegawai values(1202,'ESTI', 'P',null,3000000,10);insert into pegawai values(1305,'EDWIN', 'L',null,3250000,11);insert into pegawai values(1306,'AMRA', 'L',null,3100000,11);insert into pegawai values(1101,'TONO', 'L',null,2250000,12);insert into pegawai values(1102,'SUTEJO','L',null,2750000,12);insert into pegawai values(1301,'DIANA', 'P',null,3000000,11);insert into pegawai values(1302,'YULI', 'P',null,2750000,11);insert into pegawai values(1303,'RINA', 'P',null,3100000,11);insert into pegawai values(1304,'DHILA', 'P',null,2500000,11);insert into pegawai values(1103,'ZAENAL','L',null,1800000,12);commit;

Materi tentang input data selesai.

Page 12: Materi Dasar Oracle-v1

Materi 5

Menampilkan Data dari Tabel dengan perintah SELECTPrasyarat :

Anda sudah mempelajari dan mengisi tabel-tabel yang dibuat di Materi 4.

Setelah data kita input ke tabel, sekarang saatnya menampilkan data. Untuk menampilkan data yang pernah kita input digunakan perintah SELECT. Syntax Perintah SELECT yang sederhana adalah sebagai berikut :

Terdiri dari dari dua klausa, yaitu klausa SELECT yang menentukan kolom apa yang akan ditampilkan dan klausa FROM yang menentukan dari tabel data akan diambil.

CARA MENULIS PERINTAH SQL

Perintah SQL not case sensitif, artinya perintah SQL bisa ditulis dengan huruf kapital atau huruf kecil

Perintah SQL bisa ditulis dalam satu baris atau dalam beberapa baris Setiap perintah SQL diakhiri dengan tanda titik koma atau semicolon “;” Keyword tidak boleh disingkat atau ditulis pada baris yang berbeda Untuk memudahkan pembacaan sebaiknya setiap klausa ditulis pada baris yang

berbeda

Sebagai contoh, tampilkan data pegawai NIP, NAMA, GAJI dan KODE_BAG, maka perintahnya adalah sebagai berikut :

SQL> SELECT nip, nama, gaji, kode_bag2 FROM pegawai; NIP NAMA GAJI KODE_BAG---- -------- ---------- --------1000 WIRA 7000000 101100 BUDI 5000000 121200 ERTIN 4250000 101300 NOVI 5500000 111201 AHMAD 2575000 101202 ESTI 3000000 101305 EDWIN 3250000 111306 AMRA 3100000 111101 TONO 2250000 121102 SUTEJO 2750000 12

Page 13: Materi Dasar Oracle-v1

1301 DIANA 3000000 111302 YULI 2750000 111303 RINA 3100000 111304 DHILA 2500000 111103 ZAENAL 1800000 1215 rows selected.

Bagaimana jika akan menampilkan data dari semua kolom yang ada ?. Ada dua cara yang bisa anda lakukan yaitu dengan menuliskan semua kolom pada perintah SELECT seperti ini :

SQL> SELECT NIP, NAMA, JK, EMAIL, GAJI, KODE_BAG2 FROM PEGAWAI;

atau ganti semua kolom dengan tanda asterik “*” setelah SELECT seperti ini :

SQL> SELECT *2 FROM PEGAWAI;

Hasil kedua perintah diatas adalah sama.

EKSPRESI ARITMATIKA

Pada perintah SQL kita bisa menggunakan ekspresi aritmatik dengan menggunakan Operator Aritmatika seperti di bawah ini.

Jalankan perintah berikut ini dan perhatikan pada kolom GAJI+500000:

SELECT NIP,NAMA,GAJI,GAJI+500000FROM PEGAWAI;

Cobalah dengan operator yang lainnya.

OPERATOR PRECEDENCE

Jika dalam satu ekspresi terdapat banyak operator, maka urutan pengerjaannya adalah *, /, +, - (kali, bagi, tambah, kurang) dengan aturan sebagai berikut:

Perkalian dan pembagian akan dikerjakan lebih dulu dari penjumlahan dan pengurungan

Page 14: Materi Dasar Oracle-v1

Operator dengan prioritas yang sama akan dikerjakan dari sisi kiri ke kanan Untuk menentukan urutan pengerjaan sebaiknya gunakan tanda kurung

Jalankan dua perintah berikut:

SELECT NIP,NAMA,GAJI,12*GAJI+500000FROM PEGAWAI;SELECT NIP,NAMA,GAJI,12*(GAJI+500000)FROM PEGAWAI;

KOLOM ALIAS

Kolom alias digunakan untuk menggantikan judul kolom Biasa digunakan untuk kolom-kolom yang ada ekspresinya Ditulis sesudah kolom yang akan diganti judul kolomnya, bisa juga digunakan

keyword AS antara nama kolom dengan kolom alias Jika kolom alias terdapat karakter space atau karakter khusus lainnya maka apit

kolom alias dengan tanda kutip ganda

Contoh penulisan kolom alias

SELECT NIP,NAMA,GAJI,12*GAJI+500000 AS TotalFROM PEGAWAI;SELECT NIP,NAMA,GAJI,12*GAJI+500000 AS “Total Gaji”FROM PEGAWAI;

Sampai disini penjelasan tentang cara menampilkan data dari tabel.

Page 15: Materi Dasar Oracle-v1

Materi 6

ProcedureProcedure adalah subprogram yang digunakan untuk melakukan proses tertentu. Procedure bisa disimpan dalam database sebagai object schema, sehingga suatu procedure bisa digunakan berulangkali tanpa harus melakukan parsing dan compile ulang. Procedure yang disimpan di database biasa disebut stored procedure.

CREATE [OR REPLACE] PROCEDURE procedure_name[(parameter1 [mode1] datatype1,parameter2 [mode1] datatype2, . . .)]IS | ASPL/SQL block;

Privilege yang dibutuhkan CREATE PROCEDURE atau CREATE ANY PROCEDURE

Contoh procedure sederhana :

SQL> CREATE OR REPLACE PROCEDURE cetak_kata2 AS3 BEGIN4 DBMS_OUTPUT.PUT_LINE('Belajar PL-SQL Programming');5 END;6 / Procedure created.

Eksekusi procedure dari SQL*Plus:

SQL> SET SERVEROUTPUT ONSQL> EXECUTE cetak_kata;Belajar PL-SQL ProgrammingPL/SQL procedure successfully completed.

Eksekusi procedure dari PL/SQL Block atau procedure lain :

SQL> BEGIN2 cetak_kata;3 END;4 /Belajar PL-SQL ProgrammingPL/SQL procedure successfully completed.

Procedure bisa mempunyai parameter yang bisa digunakan untuk mengirim nilai ke dalam prosesure dan menampung hasil proses dari procedure.Ada tiga mode parameter untuk stored procedure yaitu :

IN : mengirim nilai (angka,variable, ekspresi)OUT : menampung hasil dari proses procedure (variabel)IN OUT : mengirim nilai dan menampung hasil proses (variabel)

Page 16: Materi Dasar Oracle-v1

Untuk demo pemakaian procedure dan parameter, dibuat tabel barang sebagai berikut :

SQL> CREATE TABLE BARANG2 (KODE VARCHAR2(3) PRIMARY KEY,3 NAMA_BRG VARCHAR2(30));Table created.-------------------------------------KODE | NAMA_BRG-------------------------------------100 | ROKOK101 | PERMEN-------------------------------------

Parameter INMode default, jika tidak disebutkan maka paramater procedure merupakan parameter IN.

SQL> CREATE OR REPLACE PROCEDURE ISI_BARANG2 (P_KODE VARCHAR2, P_NAMA IN VARCHAR2)3 AS45 BEGIN6 INSERT INTO BARANG VALUES(P_KODE,P_NAMA);7 COMMIT;8 END;9 /Procedure created.

Parameter P_KODE dan P_NAMA merupakan parameter IN.

Eksekusi procedure

SQL> EXECUTE ISI_BARANG(100,'ROKOK');PL/SQL procedure successfully completed.SQL> EXECUTE ISI_BARANG(101,'PERMEN');PL/SQL procedure successfully completed.

Parameter OUTDigunakan untuk menampung hasil proses procedure. ditandai dengan OUT setelah nama parameter.

CREATE OR REPLACE PROCEDURE CARI_BARANG(P_KODE IN VARCHAR2, P_NAMA OUT VARCHAR2)AS V_NAMA_BRG VARCHAR2(30);BEGIN SELECT NAMA_BRG INTO V_NAMA_BRG FROM BARANG WHERE KODE=P_KODE; P_NAMA := V_NAMA_BRG;END;

Buat environment variable atau bind variable untuk menampung hasil procedure

Page 17: Materi Dasar Oracle-v1

SQL> VARIABLE gnama varchar2(30);SQL> SET AUTOPRINT ONSQL> EXECUTE cari_barang(100,:gnama);PL/SQL procedure successfully completed.GNAMA--------------------------------ROKOK

Parameter IN OUT

Parameter yang digunakan untuk mengirim nilai dan menampung hasil procedure, ditandai dengan IN OUT setelah nama parameter.

SQL> CREATE OR REPLACE PROCEDURE format_phone2 (phone_no IN OUT VARCHAR2) IS3 BEGIN4 phone_no := '(' || SUBSTR(phone_no,1,3) ||5 ')' || SUBSTR(phone_no,4,3) ||6 '-' || SUBSTR(phone_no,7);7 END format_phone;8 /Procedure created.

Buat environment variable atau bind variable untuk mengirim dan menampung hasil procedure

SQL> VARIABLE G_PHONE VARCHAR2(12);SQL> BEGIN2 :G_PHONE := '636296532';3 END;4 /PL/SQL procedure successfully completed.G_PHONE--------------------------------636296532

diatas adalah nilai yang akan dikirim melalui G_PHONE

Eksekusi procedure

SQL> EXECUTE format_phone(:G_PHONE);PL/SQL procedure successfully completed.G_PHONE--------------------------------(636)296-532

isi G_PHONE sudah berubah sesuai format

Masuk : 636296532 Keluar: (636)296-532

Demikian bahasan tentang Procedure

Page 18: Materi Dasar Oracle-v1

Materi 7

FunctionFunction adalah jenis PL/SQL block yang menghasilkan satu nilai. Secara umum, function digunakan melakukan perhitungan, mengecek eksistensi dan kevalidan suatu data. Function bisa dilibatkan dalam expresi. Function bisa disimpan dalam database sebagai object schema, sehingga suatu function bisa digunakan berulangkali tanpa harus melakukan parsing dan compile ulang.

CREATE [OR REPLACE] FUNCTION function_name[(parameter1 [mode1] datatype1,RETURN datatypeIS | ASPL/SQL block; 

Parameter yang berlaku pada function hanya parameter IN.

Privilege yang dibutuhkan CREATE PROCEDURE atau CREATE ANY PROCEDUREUntuk demo tentang function connect sebagai user SCOTT.Gunakan tabel EMP, buat function yang mengembalikan SAL dari EMPNO yang dikirim.

-- periksa struktur tabel EMPSQL> DESC emp; Name Null? Type ----------------------- -------- ------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2)CREATE OR REPLACE FUNCTION GET_SAL (P_EMPNO NUMBER)RETURN NUMBERAS   V_SAL NUMBER(10);BEGIN  SELECT SAL INTO V_SAL  FROM EMP WHERE EMPNO=P_EMPNO;  -- Nilai yang dikeluarkan  RETURN V_SAL;END;/

Berbagai cara menjalankan Function.– Menjalankan function sebagai parameter dari suatu procedure

Page 19: Materi Dasar Oracle-v1

SQL> SET SERVEROUTPUT ONSQL> EXECUTE DBMS_OUTPUT.PUT_LINE(GET_GAJI(7369));800

– Menjalankan funtion sebagai bagian dari ekspresi

SQL> SET AUTOPRINT ONSQL> VARIABLE G_HASIL NUMBER;SQL> EXECUTE :G_HASIL := GET_GAJI(7788);PL/SQL procedure successfully completed.G_HASIL----------3000

– Menjalankan function pada perintah SELECT

SQL> SELECT EMPNO,ENAME,GET_SAL(EMPNO) FROM EMP;       NIP NAMA GET_SAL(EMPNO)---------- ---------- -------------      7369 SMITH 800        7499 ALLEN 1600      7521 WARD 1250      7566 JONES 2975      7654 MARTIN 1250

Contoh lain function

CREATE OR REPLACE FUNCTION PAJAK(P_SAL NUMBER, PCT NUMBER)RETURN NUMBERASBEGIN   RETURN (P_SAL * (PCT/100));END;/SQL> SELECT EMPNO,ENAME,SAL,PAJAK(SAL,10)2 FROM EMP;     EMPNO ENAME SAL PAJAK(SAL,10)---------- ---------- ---------- -------------      7369 SMITH 800 80      7499 ALLEN 1600 160      7521 WARD 1250 125      7566 JONES 2975 297.5      7654 MARTIN 1250 125      7698 BLAKE 2850 285      7782 CLARK 2450 245      7788 SCOTT 3000 300      7839 KING 5000 500

Demikian bahasan tentang FunctionTerimakasih

Page 20: Materi Dasar Oracle-v1

Materi 8

Manajemen Stock Dengan Trigger DatabaseTulisan ini mengulas tentang manajemen stock atau inventory dan tidak membahas bagaimana menghitung Total ataupun subtotal. Untuk manajemen stock dibuat menggunakan trigger database. Privilege yang dibutuhkan CREATE TRIGGER.

Ada lima tabel yang digunakan yaitu MASTER_BARANG, ORD, ORD_DETAIL, SALES dan SALES_DETAIL. Rancangan tabel seperti pada gambar.

Ketentuan

Barang yang akan dibeli atau dijual harus ada di tabel MASTER_BARANG Pembelian akan menambah stock barang Penjualan akan mengurangi stock barang Quantity (QTY) penjualan dan pembelian boleh diupdate dan otomatis akan

mempengaruhi jumlah stock di MASTER_BARANG

1. MEMBUAT TABEL DAN CONSTRAINT

CREATE TABLE MASTER_BARANG (KODE_BRG NUMBER(4) PRIMARY KEY,NAMA_BRG VARCHAR2(20) NOT NULL,HARGA NUMBER(10),STOCK NUMBER(4));CREATE TABLE ORD(NO_ORDER NUMBER(4) PRIMARY KEY,ID_SUPPLIER NUMBER(4) NOT NULL,TGL_ORDER DATE,RP_TOTAL NUMBER(12));

CREATE TABLE ORDER_DETAIL(NO_ORDER NUMBER(4) REFERENCES ORD(NO_ORDER),

Page 21: Materi Dasar Oracle-v1

NO_URUT NUMBER(3),KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG),HARGA NUMBER(10),QTY NUMBER(4),SUBTOTAL NUMBER(10));

CREATE TABLE SALES(NO_SALES NUMBER(4) PRIMARY KEY,ID_CUST NUMBER(4) NOT NULL,TGL_SALES DATE,RP_TOTAL NUMBER(12));

CREATE TABLE SALES_DETAIL(NO_SALES NUMBER(4) REFERENCES SALES(NO_SALES),NO_URUT NUMBER(3),KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG),HARGA NUMBER(10),QTY NUMBER(4),SUBTOTAL NUMBER(10));

2. MEMBUAT TRIGGER DATABASE

Trigger UPDATE_STOCK_BRG_ORDBuat trigger update_stock_brg_ord di tabel order_detail Yang berfungsi untuk mengupdate stock di tabel master_barang jika ada pembelian barang atau perubahan qty di tabel order_detail.

CREATE OR REPLACE TRIGGER update_STOCK_brg_ordBEFORE INSERT OR UPDATE OF QTY ON order_detailFOR EACH ROWBEGIN IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN UPDATE MASTER_BARANG SET STOCK = STOCK + (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; ELSE UPDATE MASTER_BARANG SET STOCK = STOCK - (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; END IF;END;/

Trigger UPDATE_STOCK_BRG_SALESBuat trigger update_stock_brg_sales di tabel sales_detail yang berfungsi untuk mengupdate stock di tabel master_barang jika ada penjualan barang atau perubahan qty di tabel sales_detail.

CREATE OR REPLACE TRIGGER update_STOCK_brg_salesBEFORE INSERT OR UPDATE OF QTY ON sales_detail FOR EACH ROW BEGIN IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN

Page 22: Materi Dasar Oracle-v1

UPDATE MASTER_BARANG SET STOCK = STOCK - (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; ELSE UPDATE MASTER_BARANG SET STOCK = STOCK + (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0)) WHERE KODE_BRG = :NEW.KODE_BRG; END IF;END;/

3. ISI DATA KE TABEL Isi master_barang dengan beberapa barang dengan kolom stock di set 0 sebagai data awal.

INSERT INTO MASTER_BARANG VALUES(100,’PERMEN’,1000,0);INSERT INTO MASTER_BARANG VALUES(200,’BUKU’,2500,0);INSERT INTO MASTER_BARANG VALUES(300,’ROTI’,1500,0);-- Lihat isi data BARANGselect * from MASTER_BARANG; KODE_BRG NAMA_BRG HARGA STOCK---------- ---------- ------ ------- 100 PERMEN 1000 0 200 BUKU 2500 0 300 ROTI 1500 0

4. PEMBELIAN, PENJUALAN dan UPDATE Lakukan pembelian untuk semua barang permen 200, buku 100, roti 100 Proses pembelian disini berarti Anda mengisi data ke tabel ORD dan ORDER_DETAIL

-- Isi dulu tabel ORDINSERT INTO ORD VALUES(1,100,SYSDATE,600000);

--Isi tabel ORD_DETAILINSERT INTO ORDER_DETAIL VALUES(1,2,200,2500,100,250000);INSERT INTO ORDER_DETAIL VALUES(1,3,300,1500,100,150000);INSERT INTO ORDER_DETAIL VALUES(1,1,100,1000,200,200000);

--Lihat data di ORD_DETAILSELECT * FROM ORDER_DETAIL;

NO_ORDER NO_URUT KODE_BRG HARGA QTY SUBTOTAL-------- ------- ---------- ------ --- ---------- 1 2 200 2500 100 250000 1 3 300 1500 100 150000 1 1 100 1000 200 200000

--Periksa stock pada tabel master_barangselect * from MASTER_BARANG;

KODE_BRG NAMA_BRG HARGA STOCK---------- ---------- ------ ------- 100 PERMEN 1000 200 200 BUKU 2500 100

Page 23: Materi Dasar Oracle-v1

300 ROTI 1500 100

-- Semua stock barang sudah bertambah sesuai jumlah order.

Lakukan penjualan barang permen 20, buku 10, roti 50. Proses penjualan disini berarti Anda mengisi data ke tabel SALES dan SALES_DETAIL

--Isi tabel SALESINSERT INTO SALES VALUES (1,222,SYSDATE,120000); 1 row created.

--Isi tabel SALES_DETAILINSERT INTO SALES_DETAIL VALUES(1,1,100,1000,20,20000);INSERT INTO SALES_DETAIL VALUES(1,2,200,2500,10,25000);INSERT INTO SALES_DETAIL VALUES(1,3,300,1500,50,75000);

--Lihat isi tabel SALES_DETAILselect * from SALES_DETAIL;

NO_SALES NO_URUT KODE_BRG HARGA QTY SUBTOTAL-------- ------- -------- ------ ----- -------- 1 1 100 1000 20 20000 1 2 200 2500 10 25000 1 3 300 1500 50 75000

--Lihat stock di tabel MASTER_BARANGselect * from MASTER_BARANG;

KODE_BRG NAMA_BRG HARGA STOCK---------- ---------- ------ ------- 100 PERMEN 1000 180 200 BUKU 2500 90 300 ROTI 1500 50

--Stock berkurang sesuai dengan jumlah penjualan.

Demikian pembahasan sederhana tentang manajemen stock (inventory) dengan menggunakan trigger database.Silahkan dikembangkan sesuai dengan keperluan Anda.

Page 24: Materi Dasar Oracle-v1