Anda di halaman 1dari 22

Cursor & Stored

Procedur

Made by:

Adam Haniif Sabarto


41518210065
CURSOR
Definisi

Pada program PL/SQL, kita tidak bisa


menyimpan data hasil query yang lebih dari 1
record di variabel. Untuk menyimpan data
yang lebih dari 1 record, maka gunakanlah
Cursor. Karena cursor berperan sebagai
penampung data dari hasil query.
Jenis

Ada 2 jenis cursor pada oracle PL/SQL, yaitu:

1. Implicit Cursor

Implicit Cursor adalah cursor yang di deklarasikan


dan dikelola secara otomatis oleh PL/SQL untuk
semua operasi SELECT Statement dan DML (Data
Manipulation Language). Implicit cursor akan
menghasilkan 1 row/record. Jika hasil cursor implisit
ini lebih dari satu baris atau tidak menghasilkan
satu baris pun, maka Oracle akan mengeluarkan
pesan kesalahan. Klausa into pada cursor implisit
dipakai untuk menugaskan nilai hasil proses select
ke dalam variabel-variabel yang dipilih.
Jenis

2. Explicit Cursor

Explicit Cursor adalah cursor yang didefiniskan


pada bagian deklarasi (DECLARE) dan
biasanya menggunakan mekanisme open,
fetching, dan close cursor.
Tahapan
1. Deklarasi (DECLARE)
Tahapan ini digunakan untuk mendeklarasikan sebuah cursor.
Sintaknya adalah:
CURSOR cursor_name IS SELECT ...;

2. Open
Tahapan ini digunakan untuk membuka atau mengaktifkan
sebuah cursor. Sintaknya adalah:
OPEN cursor_name;

3. Fetching Data (Mengambil data)


Tahapan ini digunakan untuk mengambil data dari sebuah cursor
dan ditampung dalam sebuah variabel yang telah ditentukan.
Sintaknya adalah :
FETCH cursor_name INTO variable_list;

4. CLOSE (Menutup cursor).


Tahapan ini digunakan untuk menutup atau me-nonaktifkan
sebuah cursor. Sintaknya adalah :
CLOSE cursor_name;
Jenis
Atribut Keterangan

TRUE jika cursor menghasilkan sebuah baris dari queri yang


SQL%FOUND
dideklarasikan. Sebaliknya FALSE.

FALSE jika cursor menghasilkan sebuah baris dari queri yang


SQL%NOTFOUND
dideklarasikan. Sebaliknya TRUE.

SQL%ROWCOUNT Jumlah baris yang telah diambil/ditangkap

Mengembalikan nilai TRUE jika cursor masih dalam keadaan terbuka


SQL%ISOPEN
(OPEN)
Table
create table buku (
id_buku VARCHAR2(10) not null,
nama_buku VARCHAR2(30) not null,
Penulis_buku VARCHAR2(30) not null,
constraint PK_buku primary key(id_buku) )
Table
insert all
into buku (id_buku,nama_buku,penulis_buku) values
('b01','Bismillah','Adam Haniif')
into buku (id_buku,nama_buku,penulis_buku) values
('b02','Djakartaku','Sandi Tanjung')
into buku (id_buku,nama_buku,penulis_buku) values
('b03','Bismillah2','Adam Haniif')
into buku (id_buku,nama_buku,penulis_buku) values
('b04','Indonesia','Arya Satya')
into buku (id_buku,nama_buku,penulis_buku) values
('b05','Kalkulus','Ibrahim')
into buku (id_buku,nama_buku,penulis_buku) values
('b06','Japan Food','Ardian')
into buku (id_buku,nama_buku,penulis_buku) values
('b07','Travelers','Iwangs')
select * from dual;
Table
Contoh
IMPLICIT CURSOR

declare
a buku.penulis_buku%type;
b buku.nama_buku%type;
c buku.penulis_buku%type;

begin
c:='Adam Haniif';
select penulis_buku, nama_buku
into a, b
from buku
where penulis_buku = c;
dbms_output.put_line('Nama Penulis : '||a||' Judul Buku '||b);

exception
when no_data_found then
dbms_output.put_line('maaf nama penulis '||c||' tidak ditemukan');
when too_many_rows then
dbms_output.put_line('maaf nama penulis '||c||' lebih dari 1 Buku');
end;
Contoh
Contoh
IMPLICIT CURSOR
DECLARE
Book VARCHAR(100);
BEGIN
UPDATE Buku
SET nama_buku = 'Kalkulus'
WHERE id_buku = 'b02';
IF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('Tidak ada record yang berhasil di update');
ELSIF SQL%FOUND THEN
Book := SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE('Ada ' || Book || ' record yang telah berhasil di
update');
END IF;
END;
Contoh
EXPLICIT CURSOR

declare
x buku.id_buku%type;
y buku.nama_buku%type;
z buku.Penulis_buku%type;

cursor cur1 is
select id_buku, nama_buku, Penulis_buku from BUKU;

begin
open cur1;
loop
fetch cur1 into x, y, z;
exit when cur1%notfound;
dbms_output.put_line('ID buku : '||x);
dbms_output.put_line('Nama Buku : '||y);
dbms_output.put_line('Penulis_buku : '||z);
end loop;
close cur1;
end;
/
Contoh
STORED PROCEDURE
Definisi

Stored procedure adalah kumpulan


pernyataan/procedure SQL yang disimpan
dalam database. Stored procedure dapat
menerima parameter, dan Anda dapat
mengatur variabel, menulis pernyataan IF, dan
lainnya dalam stored procedure.
prosedur
1 CREATE [OR REPLACE] PROCEDURE [nama_schema] nama_procedure
[(paramater
2
[,paramater])]

3 IS | AS

4 [deklarasi]

5 BEGIN

6 [deklarasi]

7 [EXCEPTION]

8 [deklarasi_exception]
END [nama_procedure]
9
;
Penjelasan sintak:
•Tanda yang ada di dalam kurung siku "[ ]" merupakan bersifat opsional.
•Paramater yang digunakan untuk membuat Procedure ada 3 macam, yaitu:
1.IN - merupakan parameter yang nilainya dapat digunakan (ditangkap) pada bagian badan
2.procedure atau function.
3.Anda tidak harus menyertakan IN pada paramater, karena secara default Oracle akan membuatkannya.
4.OUT - merupakan parameter yang nilainya dapat digunakan oleh si pemanggil procedure atau function.

IN OUT - merupakan parameter yang nilainya digunakan oleh procedure atau function yang kemudian
diproses, dan selanjutnya dikembalikan kepada si pemanggil procedure atau function
contoh
create or replace procedure safesr
is
adamhs varchar(100);
begin
select 'Adam Haniif Sabarto' INTO adamhs
from dual;

DBMS_OUTPUT.PUT_LINE(adamhs);
end;
contoh
create or replace procedure math(bil1 in number, bil2 in number)
is
perkalian varchar(10);
begin
select bil1 * bil2 INTO perkalian
from dual;
DBMS_OUTPUT.PUT_LINE('Hasil Perkalian '||perkalian);
end math;
/

Anda mungkin juga menyukai