Está en la página 1de 23

Manajemen Basis Data

View, Trigger, Procedure, Function


Agenda
• Adalah tabel virtual yang menampung result-set/hasil
dari query.
• Sebuah view berisi baris dan kolom seperti struktur
tabel.
• Kolom-kolom pada view bisa berasal dari satu atau lebih
tabel.
• View dapat digunakan sebagai keamanan.
• Sebuah informasi dapat diambil dari query view, bukan dari
tabel asli

View
CREATE VIEW view_name AS
Create SELECT column_name(s)
FROM table_name
WHERE condition
Update

CREATE OR REPLACE VIEW view_name AS


SELECT column_name(s)
FROM table_name
WHERE condition
Drop

DROP VIEW view_name


Display

SELECT * FROM view_name

Sintaks View
CREATE VIEW [Products Above Average Price] AS
Create SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

CREATE OR REPLACE VIEW [Products Above Average Price]


Update

AS
SELECT ProductID, ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)
Drop

DROP VIEW [Products Above Average Price]


Display

SELECT * FROM [Products Above Average Price]

Contoh View
• Database trigger adalah prosedur yang disimpan di
DBMS yang berhubungan dengan tabel yang spesifik.

• Trigger dieksekusi secara otomatis ketika sebuah perintah


DML (INSERT, UPDATE, DELETE) berpengaruh pada
tabel.

• Pemanggilan trigger bersifat implisit, berbeda dengan


procedure dan function yang pemanggilannya bersifat
eksplisit

Trigger
Database trigger dapat digunakan untuk melakukan:

Audit data modification

Log events transparently

Enforce complex business rules

Derive column values automatically

Implement complex security authorizations

Maintain replicate tables

Trigger
Event
• Perubahan database yang mengaktifkan trigger

Condition
• Query atau tes yang berjalan ketika trigger sedang dilakukan
• Bersifat opsional
Action
• Sebuah prosedur yang dieksekusi ketika trigger diaktifkan
dan persyaratannya bernilai benar

Deskripsi Trigger
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE|AFTER} triggering_event ON table_name
[FOR EACH ROW]
[WHEN condition]
DECLARE
Declaration statements
BEGIN
Executable statements
EXCEPTION
Exception-handling statements
END;

Sintaks Trigger
CREATE TRIGGER init_count BEFORE INSERT ON Students event
DECLARE
count INTEGER;
BEGIN
count:=0; action
END

CREATE TRIGGER incr_count AFTER INSERT ON Students


WHEN (new.age < 18) condition
FOR EACH ROW
BEGIN
count:=count + 1;
END

Contoh Trigger
CREATE TRIGGER init_count BEFORE INSERT ON Students
DECLARE
count INTEGER;
BEGIN STATEMENT-LEVEL
count:=0; TRIGGER
END

CREATE TRIGGER incr_count AFTER INSERT ON Students


WHEN (new.age < 18)
FOR EACH ROW
BEGIN
ROW-LEVEL TRIGGER
count:=count + 1;
END

Contoh Trigger
• Digunakan jika action berpengaruh pada individual
change record.
• Menggunakan klausa: FOR EACH ROW
• Klausa WHEN dapat digunakan

CREATE TRIGGER incr_count AFTER INSERT ON Students


WHEN (new.age < 18)
FOR EACH ROW
BEGIN
ROW-LEVEL TRIGGER
count:=count + 1;
END

Contoh Trigger
CREATE TRIGGER init_count BEFORE INSERT ON Students
DECLARE
count INTEGER;
FOR EACH STATEMENT STATEMENT-LEVEL
BEGIN
count:=0; TRIGGER
END

• Digunakan jika trigger dieksekusi untuk setiap pernyataan


INSERT, UPDATE atau DELETE (mengabaikan jumlah
record)
• Menggunakan klausa: FOR EACH STATEMENT (boleh tidak
ditulis, karena merupakan klausa default)
• Tidak memiliki klausa WHEN

Contoh Trigger
• Procedure adalah modul yang melakukan sebuah action
atau lebih,
• Tidak perlu mengembalikan nilai
• Sebuah procedure bisa memiliki nol sd. banyak parameter
• Procedure terdiri dari dua bagian:
• Header: berisi nama procedure dan daftar parameter
• Body: semua yang tertulis setelah kata kunci IS atau AS
• Kata kunci REPLACE bersifat opsional
• Jika REPLACE tidak digunakan, saat ingin mengubah kode
dalam procedure maka procedure harus di-drop dulu
kemudian di-create ulang

Procedure
CREATE OR REPLACE PROCEDURE name [(parameter[,
parameter, ...])]
AS
[local declarations]
BEGIN
executable statements
[EXCEPTION
exception handlers]
END [name];

Eksekusi Procedure:
EXECUTE Procedure_name

Sintaks Procedure
CREATE OR REPLACE PROCEDURE Discount
AS Cursor
CURSOR c_group_discount digunakan untuk
IS melakukan
SELECT distinct s.course_no, looping
c.description
FROM section s, enrollment e, course c
WHERE s.section_id = e.section_id
AND c.course_no = s.course_no
GROUP BY s.course_no, c.description,
e.section_id, s.section_id
HAVING COUNT(*) >=8;
BEGIN

Contoh Procedure
FOR r_group_discount IN c_group_discount
LOOP
UPDATE course
SET cost = cost * .95
WHERE course_no =
r_group_discount.course_no;
DBMS_OUTPUT.PUT_LINE
('A 5% discount has been given to'||
r_group_discount.course_no||' '||
r_group_discount.description
);
END LOOP;
END; EXECUTE Discount

Contoh Procedure lanjutan


• Function mirip dengan procedure, namun function
mengembalikan sebuah nilai.
• Function dapat menerima nol, satu atau lebih parameter namun
harus memiliki klausa return pada bagian executable dari
function
• Tipe data dari return value harus dideklarasi di header function
• Tidak bersifat stand-alone executable: harus digunakan pada
suatu konteks,
• Output dari sebuah function harus:
• Dimasukkan ke dalam variabel, atau
• Digunakan pada pernyataan SELECT

Function
CREATE [OR REPLACE] FUNCTION function_name
(parameter list)
RETURN datatype
IS
BEGIN
<body>
RETURN (return_value);
END;

Sintaks Function
CREATE OR REPLACE FUNCTION show_description (i_course_no number)
RETURN varchar2
AS
v_description varchar2(50);
BEGIN
SELECT description
INTO v_description
FROM course
WHERE course_no = i_course_no;
RETURN v_description;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN('The Course is not in the database');
WHEN OTHERS
THEN
RETURN('Error in running show_description');
END;

Contoh Function
SET SERVEROUTPUT ON Anonymous block
DECLARE
v_description VARCHAR2(50);
BEGIN
v_description := show_description(&sv_cnumber);
DBMS_OUTPUT.PUT_LINE(v_description);
END;

SQL statement
SELECT course_no, show_description(course_no)
FROM course;

Pemanggilan Function
Latihan
1. Buatlah view untuk menampilkan customers dengan
gaji dan usia tertentu
2. Buatlah trigger yang digunakan untuk menampilkan
data perbedaan gaji customers jika dilakukan perubahan
pada basis data
3. Buatlah fungsi yang digunakan untuk menghitung
jumlah customers
4. Buatlah procedure untuk menampilkan data customers
yang memiliki usia di atas 25 tahun

Latihan

También podría gustarte