Selasa, 26 November 2013

Handling Exceptions

Sebuah Informasi yang cukup bermanfaat bagi yang ingin mempelajari PL/SQL, karena ini termasuk dasar dari PL/SQL.

Handling Exceptions
 merupakan salah satu kelebihan dari PL/SQL yang digunakan untuk menangani error yang terjadi pada saat run time.
Sebagai contoh, pada saat kita menuliskan sebuah query, dan data tersebut tidak ditemukan di dalam database, maka oracleakan membangkitkan eksepsi NO_DATA_FOUND  dengan kode ORA-01403 yang berarti data tidak ditemukan. Berikut ini kita akan menuliskan perbedaan dengan menggunakan blok eksepsi dengan yang tidak menggunakan blok eksepsi.
Contoh Yang tidak Menggunakan blok eksepsi :
SET SERVEROUTPUT ON
DECLARE
nama employees.last_name
%type;
BEGIN
SELECT last_name INTO nama FROM employees
WHERE employee_id = 309;
DBMS_OUTPUT.PUT_LINE ('nama');
END;
Hasilnya:
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4
Contoh Yang Menggunakan Blok Eksepsi :
SET SERVEROUTPUT ON
DECLARE
nama employees.last_name
%type;
BEGIN
SELECT last_name INTO nama FROM employees
WHERE employee_id = 309;
DBMS_OUTPUT.PUT_LINE ('nama');
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE ('TIdak Ditemukan Datanya dalam Database');
END;
Hasilnya :
TIdak Ditemukan Datanya dalam Database
PL/SQL procedure successfully completed.

Berikut ini merupakan nama beserta Code exception di PL/SQL




Berikut ini merupakan keterangan dari nama exception di PL/SQL



Pada variabel dengan tipe data skalar, kita tidak dapat menampung banyak nilai dalam variabel tersebut, untuk menangani error yang terjadi ketika kita memasukkan banyak nilai ke dalam satu variabel skalar, maka kita menggunakan EXCEPTION TOO_MANY_ROWS
Contoh :
DECLARE
empno 
NUMBER;
BEGIN
SELECT employee_id INTO empno FROM employees ;
DBMS_OUTPUT.PUT_LINE(empno);
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('THERE ARE TOO MANY ROWS');
END;
Hasilnya :
THERE ARE TOO MANY ROWS
PL/SQL procedure successfully completed.
Kita tidak perlu menghafal semua nama dari setiap exception handling diatas, kita cukup hanya menghafal beberapa saja dan sisanya kita dapat menggunakan eksepsi OTHERS.
DECLARE
empno 
NUMBER;
BEGIN
SELECT employee_id INTO empno FROM employees ;
DBMS_OUTPUT.PUT_LINE(empno);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Data Tidak Ditemukan');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Terjadi Error yang Lain');
END;
Hasil :
Terjadi Error yang Lain
PL/SQL procedure successfully completed.

PRAGMA EXCEPTION INIT

PRAGMA EXCEPTION INIT digunakan agar  kita dapat mendefinisikan nama EXCEPTION kita sendiri, tetapi berdasakan dengan ERROR CODE yang ada.
contoh :
SET SERVEROUTPUT ON
DECLARE
kebanyakan EXCEPTION;
PRAGMA EXCEPTION_INIT(kebanyakan, -01422);
emp employees.employee_id
%type;
BEGIN
SELECT employee_id INTO emp FROM Employees;
DBMS_OUTPUT.PUT_LINE(EMP);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Hasil tidak ditemukan');
WHEN kebanyakan THEN
DBMS_OUTPUT.PUT_LINE(‘hasilnya kebanyakan’);
END;
Penjelasan :
Pada mulanya error code -01422 merupakan code exception dari TOO_MANY_ROWS, tetapi dengan menggunakan PRAGMA_EXCEPTION_INIT, kita merubah TOO_MANY_ROW menjadi KEBANYAKAN. Yang sebelumnya, KEBANYAKAN telah dideklarasikan terlebih dahulu dengan menjadi sebuah EXCEPTION.

SQLCODE dan SQLERRM

SQLCODE dan SQLERRM biasa digunakan pada EXCEPTION OTHERS untuk mengetahui error apa yang terjadi. SQLCODE untuk menampilkan kode eksepsi, sedangkan SQLERRM digunakan untuk menampilkan keterangan eksepsi.
contoh :
SET SERVEROUTPUT ON
DECLARE
emp employees%rowtype;
BEGIN
SELECT * into emp FROM EMPLOYEES WHERE employee_id > 100;
EXCEPTION
WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE('No Data Found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
DBMS_OUTPUT.PUT_LINE('error code ='||SQLCODE);
DBMS_OUTPUT.PUT_LINE('error message ='||SQLERRM);
END;
Hasilnya :
ERROR 
error code =-1422 
error message =ORA-01422: exact fetch returns more than requested number of rows 
PL/SQL procedure successfully completed.

RAISE APPLICATION ERROR

Pada PRAGMA EXCEPTION INIT kita hanya dapat mendefinisikan sendiri nama dari eksepsi tersebut dan masih harus sesuai dengan ERROR CODEnya. Tetapi dengan menggunakan RAISE APPLICATION ERROR, kita dapat menentukan sendiri nama beserta code dari eksepsi yang kita inginkan.
contoh :
SET SERVEROUTPUT ON
DECLARE
name 
VARCHAR2(100);
sal 
NUMBER;
BEGIN 
SELECT last_name, salary INTO name, sal FROM employeesWHERE employee_id = 120;
IF sal > 5000 THEN
RAISE_APPLICATION_ERROR (-20000,'Gaji Kebanyakan');
END IF;
DBMS_OUTPUT.PUT_LINE(name||' '||sal);
END;
Hasilnya :
DECLARE *
ERROR at line 1: 
ORA-20000: Gaji Kebanyakan 
ORA-06512: at line 8


Minggu, 29 September 2013

PBD (Pemrograman Basis Data) pertemuan 4 - Procedure dan Funcion

Pada mata kuliah PBD (Pemrograman Basis Data) pertemuan ke-4 minggu lalu, telah menjelaskan tentang Procedure dan Fuction.

Procedure
adalah
sebuah block yang dapat berdiri sendiri serta dikompilasi untuk selanjutnya masuk ke dalam skema database.

Bentuk umum dari prosedur pada SQL

Bentuk umum:
CREATE OR REPLACE PROCEDURE
nama_prosedure;
(parameter1 tipe_data,...) AS
...
BEGIN
statement;
...
END;

Contoh Program Prosedure pada
SQL:

1:  create or replace procedure tambah_dua(a integer) as 
2:  hasil number (5); 
3:  begin 
4:  hasil:=a+2; 
5:  dbms_output.put_line('Hasilnya :'||hasil); 
6:  end; 
7:  /

Function adalah suatu blok SQL yang memiliki konsep sama dengan procedure, hanya saja pada function terdapat pengembalian nilai (return value).Karena function dapat mengembalikan sebuah nilai, function dapat diakses seperti layaknya sebuah variabel biasa.

Bentuk Umum :

CREATE OR REPLACE FUNCTION nama_function (parameter_1, …)
RETURN tipe_data AS
variabel_1 tipe_data;

BEGIN
statemen_1;

RETURN nilai_yang_dikembalikan;
END;


Statemen RETURN tipe_data diatas menunjukkan bahwa function akan mengembalikan nilai dengan tipe data tertentu
Statemen RETURN nilai_yang_dikembalikan berfungsi untuk mengembalikan nilai yang telah diproses dalam function

Contoh Function Tanpa Parameter :
(1)
CREATE OR REPLACE FUNCTION tulis_teks RETURN VARCHAR2 AS
S VARCHAR2(20)
BEGIN
S := ‘HALLO SEMUA’;
RETURN S;
END;
/

(2)
SET SERVEROUTPUT ON
DECLARE
X VARCHAR2(20);
BEGIN
X := tulis_teks;
DBMS_OUTPUT.PUT_LINE(X);
END;
/


Contoh Function Dengan Parameter :
(1)
CREATE OR REPLACE FUNCTION
pangkat (bil INTEGER, n INTEGER)
RETURN INTEGER AS
HASIL INTEGER(10);
I INTEGER;
BEGIN
HASIL := 1;
FOR I IN 1..n LOOP
HASIL := HASIL * bil;
END LOOP;
RETURN HASIL;
END;
/


Type Data Referance

Type Data Reference merupakan salah satu dari macam-macam tipe data pada pl/sql yang digunakan untuk mereferensikan tipe data pada variabel lain.

Attribut %TYPE

%TYPE adalah attribut yang digunakan untuk mendeklarasikan sebuah variable yang sesuai dengan:
  • Definisi sebuah kolom database
  • Deklarasi variable lain
Selain itu, %TYPE diawali dengan
  • Tabel dan Kolom Database
  • Nama dari Variabel yang dideklarasikan

Deklarasi Variabel dengan %TYPE

Syntax:
identifier table.column_name%TYPE;
Contoh :
emp_name employees.last_name%TYPE;
balance 
NUMBER(7,2);
min_balance balance
%TYPE := 1000;
Penjelasan :
Pada contoh diatas, kita membuat 3 buah variabel yaitu Variabel emp_name, balance, dan min_balance dimana Variabel emp_name memiliki tipe yang sama dengan tipe kolom last_name pada tabel employees, lalu Variabel balance bertipe Number, Dan Variabel min_balance yang bertipe sama dengan Variabel balance yang memiliki tipe NUMBER

Attribut %ROWTYPE

%ROWTYPE digunakan untuk mendeklarasikan sebuah variabel yang sesuai dengan tipe data sejumlah kolom pada tabel atau view di database. Beda halnya dengan %TYPE yang hanya bisa mereferensikan satu tipe kolom atau satu variabel saja.
Keuntungan menggunakan %ROWTYPE :
  • Kita tidak perlu mengetahui berapa jumlah dan tipe data kolom pada tabel atau view yang ingin kita referensikan
  • Adanya kemungkinan terjadinya perubahan jumlah dan tipe data kolom pada tabel atau view pada saat run time
  • Cocok digunakan saat menerima data menggunakan SELECT * statement
Syntax :
DECLARE identifier reference%ROWTYPE;
Contoh :
SET SERVEROUTPUT ON
DECLARE
Col_Emp employees
%ROWTYPE;
BEGIN
SELECT * INTO Col_Emp
FROM Employees
WHERE Employee_id = 120;
DBMS_OUTPUT.PUT_LINE(Col_Emp.last_name);
DBMS_OUTPUT.PUT_LINE(Col_Emp.first_name);
DBMS_OUTPUT.PUT_LINE(Col_Emp.salary);
END;
Pada Contoh diatas kita membuat sebuah variabel Col_Emp yang mempunyai semua tipe data pada kolom tabel employees.

Rabu, 25 September 2013

Pengumuman

pada postingan selanjut-selanjutnya, sebagian besar akan di copy kan dari blog sebelah http://risnotes.com/
karena blog itu sangat lengkap penjelasannya tentang PL/SQL

Sabtu, 21 September 2013

CURSOR (Penjelasan Lengkap)

Postingan ini menyempurnakan postingan sebelumnya yang juga membahas tentang Cursor, tapi karena informasi yang belum terlalu lengkap, maka postingan ini menyempurnakan yang sebelumnya.

CURSOR
Pada block PL/SQL 
kita tidak bisa menampilkan beberapa baris dengan menggunakan perintah SELECT secara langsung. Untuk mengatasi hal tersebut, maka kita dapat menggunakan sebuah kursor. Berbeda dengan variabel skalar, cursor dapat menampung banyak nilai berupa baris atau record. Nilai-nilai yang disimpan dalam sebuah kursor kemudian dapat dimanipulasi sehingga dapat digunakan sesuai kebutuhan.
Cursor sendiri terdiri dari 2 tipe :
  1. Implicit Cursor
    Merupakan Cursor yang dideeklarasikan dan dikelola secara otomatis oleh PL/SQL untuk semua operasi DML SQL dan PL/SQL SELECT Statement
  2. Eksplicit Cursor
    Merupakan Cursor yang dikelola dan dideklarasikan oleh Programmer
Nb : Sebelum memulai mempelajari CURSOR ada baiknya mempelajari metode Looping terlebih dahulu.



Senin, 16 September 2013

Resume PBD Pertemuan 3

Pada pertemuan ke-3 Pemrograman Basis Data (16/09/2013) tadi, ada 2 kelompok mempresentasikan tentang Cursor.
Cursor yang dimaksud bukanlah pointer, melainkan nama area SQL dimana informasi untuk pemrosesan pernyataan SQL yang sifatnya spesifik.
dan Cursor sendiri, dibagi menjadi 2, yaitu Implicit cursor, dan Explicit Cursor.

Minggu, 15 September 2013

Kamus Oracle

Update
perintah untuk memperbaharui  data  dengan  data yang  lebih  baru.
UPDATE NAMA_TABEL SET KOLOM1=DATA1, KOLOM2=DATA2, …, KOLOMn=DATAn WHERE KRITERIA;
Delete
perintah untuk menghapus  data  tertentu yang kita inginkan.
DELETE FROM NAMA_TABLE WHERE KRITERIA;