Rabu, 23 Januari 2013

function, subquery, trigger, privilege



SOAL/PERMASALAHAN
1.      Apa pengertian dari Strored Procedure ?
2.      Apa yang dimaksud dengan function ?
3.      Berikan sintak bentuk umum dari Function !
4.      Sebutkan tipe-tipe Trigger !
5.      Apa yang dimaksud dengan Trigger ?
6.      Jelaskan apa yang dimaksud Trigger Timing ?
7.      Jelaskan pengertian sub query !












LANDASAN TEORI
Stored Procedures

1. Stored procedure pada dasarnya adalah sebuah program yang disimpan di dalam database server, karena stored procedure ini dapat menerima suatu input parameter dan output parameter serta dapat menghasilkan suatu message succes atau error.
2. Stored procedure sangat bermanfaat untuk aplikasi database, baik untuk meningkatkan kinerja maupun untuk pemeliharaan. Karena setelah procedure dijalankan di server, akses berikutnya akan menjadi lebih mudah dan cepat karena eksekusi telah tersimpan di dalam memory.
3. Stored procedure juga dapat menjalankan procedure yang lain, dan juga dapat memberitahukan bahwa ia telah dijalankan dengan sukses atau gagal.
4. Stored procedure dapat menerima parameter input, dengan menggunakan variabel lokal, dan menghasilkan data dengan menggunakan output parameter, return code, result set dari statement SELECT.

Functions

Function adalah suatu blok PL/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;
/

(2)
SET SERVEROUTPUT ON
DECLARE
H INTEGER;
BEGIN
H := pangkat(2, 3);
DBMS_OUTPUT.PUT_LINE(‘Hasil = ‘ || TO_CHAR(H));
END;
/

Contoh Function Dalam Function :
(1)
CREATE OR REPLACE FUNCTION kuadrat (X NUMBER)
RETURN NUMBER AS
HASIL NUMBER(10);
BEGIN
HASIL := X * X;
RETURN HASIL;
END;
/

(2)
CREATE OR REPLACE FUNCTION determinan
(a NUMBER, b NUMBER, c NUMBER)
RETURN NUMBER AS
D NUMBER(10);
BEGIN
D := kuadrat(b) – (4 * a * c);
RETURN D;
END;
/
Trigger pada SQL

Trigger adalah blog pada PL/SQL atau prosedur yang berhubungan dengan tabel, view, skema atau database yang dijalankan secara implicit pada saat terjadi sebuah event. Trigger merupakan store prosedur yang dijalankan secara automatis saat user melakukan modifikasi data pada tabel. Modifikasi data yang dilakukan pada tabel yaitu berupa perintah INSERT, UPDATE dan DELETE. INSERT, UPDATE dan DELETE bisa digabung jadi satu trigger yang dinamakan Multiple Trigger.

Tipe dari Trigger adalah :
1. Application trigger : diaktifkan pada saat terjadi event yang berhubungan dengan sebuah aplikasi.
2. Database trigger : diaktifkan pada saat terjadi event yang berhubunga dengan data (seperti operasi DML) atau event yang berhubungan dengan system (misal logon atau shut down) yang terjadi pada sebuah skeam atau database.

Trigger perlu dibuat pada saat :
1. Membuat sebuah aksi tertentu terhadap suatu event.
2. Memusatkan operasi global.

Trigger tidak perlu dibuat, jika :
1. Fungsionalitas yang diperlukan suatu ada pada Oracle server.
2. Duplikat atau sama dengan fungsi trigger yang lain.

Sintak penulisan dari database trigger, berisi komponen berikut :
1. Trigger timing :
            a. Untuk tabel : BEFORE, AFTER
            b. Untuk view : INSTEAD OF
2. Trigger event : INSERT, UPDATE, atau DELETE
3. Nama tabel : yaitu nama tabel atau view yang berhubunga dengan trigger.
4. Tipe trigger : baris atau pernyataan (statement)
5. Klausa WHEN : untuk kondisi pembatasan pada trigger
6. Trigger body : bagian prosedur yang dituliskan pada trigger.




Trigger timing adalah waktu kapan trigger diaktifkan. Ada tiga macam trigger triming, yaitu :
1. BEFORE : trigger dijalankan sebelum DML event pada tabel.
2. AFTER : trigger dijalankan setelah DML event pada tabel.
3. INSTEAD OF : trigger dijalankan pada sebuah view.

Trigger event ada 3 kemungkinan : INSERT, UPDATE, atau DELETE. Pada saat trigger event UPDATE,  kita dapat memasukkan daftar kolom untuk mengidentifikasi kolom mana yang berubah untuk mengaktifkan sebuah trigger (contoh : UPDATE OF salary ...). Jika tidak ditentukan, maka perubahanya akan berlaku untuk semua kolom pada semua baris.

Tipe trigger ada 2 macam yaitu :
1. Statement : trigger dijalankan sekali saja pada saat terjadi sebuah event. Statement trigger juga dijalankan sekali, meskipun tidak ada satupun baris yang dipengaruhi oleh event yang terjadi
2. Row : trigger dijalankan pada setiap baris yang dipengaruhi oleh terjadinya sebuah event. Row trigger tidak dijalankan jika event dari trigger tidak berpengaruh pada satu baris pun.

Trigger body mendefinisikan tindakan yang perlu dikerjakan pada saat terjadinya event yang mengakibatkan sebuah trigger menjadi aktif.

syntax TRIGGER:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
trigger_name adalah nama trigger yang akan dibuat.
trigger time adalah kapan trigger di eksekusi. bisa AFTER atau BEFORE
trigger_event adalah kejadian yang mengaktifkan trigger. trigger_event bisa berupa :
  • INSERT : trigger aktif ketika ada record baru yang di-insert ke tabel.
  • UPDATE : trigger aktif ketika record di modify
  • DELETE : trigger aktif ketika record di hapus dari tabel

triger_stmt
adalah prosedur/perintah yang dijalankan ketika trigger aktif. jika kita mempunyai beberapa perintah, gunakan BEGIN ... END

Menghapus Triggers
DROP TRIGGER [nama trigger]

contoh kasus :

secara otomatis tabel mengurangi jumlah stok ketika ada proses penjualan / barang keluar.

script trigger :
create trigger kurangStok after insert on detail_penjualan
for each row begin
update barang set jml_stok=jml_stok-NEW.jml_keluar where id_barang=NEW.id_barang;
end;

Pengertian Sub Query
Merupakan query yang terletak dalam query yang lain.
Contoh :
Akan ditampilkan nama pegawai yang mempunyai gaji paling besar :
  1. select nama from pegawai where sal = (select max(gaji) from pegawai);  












 

Pemberian Hak akses merupakan salah satu cara dalam mengatur tingkat keamanan dalam database. Database Security sendiri dikategorikan berdasarkan 2 jenis yaitu : System Security dan Data Security
System Security melindungi dan mengatur hak akses dan penggunaan database pada level sistem, seperti username, password, alokasi disc space yang diberikan pada user dan pengoperasian sistem yang dapat dioperasikan oleh user.
Data Security yaitu memastikan tidak adanya data yang corrupt dan terkontrolnya pengaksesan terhadap data tersebut.

System Privilege

System Privilege ini digunakan oleh database administrator untuk memberikan hak istimewa kepada user dalam menjalankan sistem.
Tipe-tipe hak istimewa DBA atau DBA Privileges :
  1. CREATE USER : penerima privilege dapat membuat user database baru
  2. DROP USER : penerima privilege dapat menghapus user
  3. DROP ANY TABLE : penerima privilege dapat menghapus tabel apa saja dalam suatu schema
  4. BACK UP ANY TABLE : penerima  privilege dapat mem-back up tabel apa saja
  5. SELECT ANY TABLE : penerima privilege dapat membuat query, tabel dan view dalam suatu schema
  6. CREATE ANY TABLE  : penerima privilege dapat membuat tabel pada schema apapun

 

 

MEMBUAT USER

Sebelum memberikan privilege, hal pertama yang harus kita lakukan yaitu membuat user baru terlebih dahulu yang diberi nama ‘manager’.

Syntax :
CREATE USER user
IDENTIFIED BY password
contoh :
CREATE USER manager
IDENTIFIED BY 123
Pada tahap ini manager belum dapat melakukan apapun, karena manager hanya dibuat tanpa diberikan suatu privilege oleh database administrator.

HAK ISTIMEWA USER

Setelah user dibuat, maka database administrator dapat memberikanya system privilege
contoh System privilege yang dapat diberikan :
  1. CREATE SESSION : untuk connect ke database
  2. CREATE TABLE : untuk membuat tabel
  3. CREATE SEQUENCE : membuat urutan dalam database schema
  4. CREATE VIEW : membuat sebuah VIEW dalam suatu schema
  5. CREATE PROCEDURE : membuat STORE PROCEDURE, FUNCTION atau PACKAGE dalam user’s schema

Memberikan System Privilege Kepada User

Contoh :
GRANT CREATE SESSION, CREATE TABLE, CREATE  SEQUENCE, CREATE VIEW, CREATE PROCEDURE
TO manager
Pada query diatas DBA memberikan 5 hak akses sekaligus yaitu create session, create table, create sequence, create view, dan create procedure


Hak akses
  • Perintah untuk membuat user baru. Contoh: CREATE USER ade identified by ade;
  • Perintah untuk merubah password user. Contoh ALTER USER ade identified by dedek;
  • Perintah untuk melock atau mengunlock suatu user. Contoh: ALTER USER ade ACCOUNT LOCK; ALTER USER ade ACCOUNT UNLOCK;
  • Perintah untuk menghapus user -> DROP USER ade;
  • Perintah untuk menambah hak akses pada sebuah user -> GRANT insert, update ON pegawai TO ade;
  • Perintah untuk membuat suatu role (kumpulan hak akses) -> CREATE ROLE manipulasi; GRANT dba TO manipulasi;
  • Perintah untuk menghapus role -> DROP ROLE manipulasi;
  • Perintah untuk mencabut hak akses dari sebuah user -> REVOKE manipulasi FROM ade;

  • Perintah untuk melihat hak privilege yang ada -> SELECT name FROM system_privilege_map;
  • Perintah untuk melihat hak akses apa saja yang dapat diberikan kepada sebuah user -> SELECT * FROM user_sys_privs;
  • Perintah untuk melihat hak akses apa saja yang telah diberikan pada sebuah user -> SELECT * FROM user_tab_privs_recd;
  • Perintah untuk melihat hak akses pada role -> SELECT * FROM dba_sys_privs WHERE grantee IN ('connect', 'resource');
  • Perintah untuk melihat apakah sebuah role mempunyai password -> SELECT * FROM dba_rules;






PEMBAHASAN
Fuction adalah jenis PL/SQL block yang menghasilkan suatu nilai. Function digunakan untuk melakukan perhitungan, mengecek eksistensi dan kevalidan data. Parameter yang berlaku pada function hanya parameter IN.
Sintak perintah:
CREATE [FOR REPLACE] FUNCTION function_name
[(parameter1[mode1] datatype1,
RETURN datatype
IS | AS
PL/SQL block;
1.      contoh pembuatan function pada user scott dengan table emp :
SQL> CREATE OR REPLACE FUNCTION GET_SAL (P_EMPNO NUMBER)
      2   RETURN NUMBER
      3   AS
      4   V_SAL NUMBER(10);
      5   BEGIN
      6   SELECT SAL INTO V_SAL
      7   FROM EMP WHERE EMPNO=P_EMPNO;
      8   --Nilai yang dikeluarkan
      9   RETURN V_SAL;
     10  END;
     11  /
Cara menjalankan function:
a.       menjalankan function sebagai parameter dari suatu procedure :
SQL> SET SERVERPOINT ON
SQL> EXECUTE DBMS_OUTPUT.PUT_LINE(GET_sal(7369));
b.      menjalankan function sebagai bagian dari ekspresi :
SQL> SET AUTOPRINT ON
SQL> VARIABLE G_HASIL NUMBER;
SQL> EXECUTE :G_HASIL := GET_sal(7788);

c.       menjalankan function pada perintah SELECT
SQL> SELECT EMPNO,ENAME,GET_SAL(EMPNO) FROM EMP;


PROCEDURE

PROCEDURE merupakan subprogram yang digunakan untuk melakukan proses tertentu. Procedure yang disimpan di database biasa disebut stored procedure.
Sintak perintah:
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter1 [mode1] datatype1,
Parameter2 [mode1] datatype2,…)]
IS|AS
PL/SQL block;

Ada tiga mode parameter untuk stored procedure, yaitu :
1.      parameter IN
CREATE OR REPLACE PROCEDURE ISI_BARANG
(P_KODE number, p_nama IN varchar2,
P_image number, p_harga number, p_satuan
varchar2,
AS
BEGIN
INSERT INTO BARANG VALUES (P_KODE,P_NAMA, p_image, p_harga, p_satuan, p_keterangan);
COMMIT;
END;
2.      parameter OUT
CREATE OR REPLACE PROCEDURE CARI_BARANG
(P_KODE IN number, P_NAMA OUT VARCHAR2)
AS
V_NAMA_BRG VARCHAR2(50);
BEGIN
SELECT NAMA_BRG INTO V_NAMA_BRG
FROM BARANG
WHERE KODE_BRG=P_KODE;
P_NAMA := V_NAMA_BRG;
END;
/
3.      parameter IN-OUT
CREATE OR REPLACE PROCEDURE format_phone
(phone_no IN OUT VARCHAR2) IS
BEGIN
Phone_no := ‘| | SUBSTR(phone_no,1,3) | |
‘)’ | | CREATE OR REPLACE PROCEDURE format_phone
(phone_no IN OUT VARCHAR2) IS
BEGIN
Phone_no := ‘| | SUBSTR(phone_no,1,3) | |
‘)’ | | SUBSTR(phone_no,4,3)| |
‘-‘ | | SUBSTR(phone_no,7) ;
END format_phone;
/

TRIGGER
Trigger adalah sebuah blok PL/SQL yang disimpan dalam database yang secara otomatis akan teraktivasi ketika terjadi suatu operasi pada sebuah table, view, schema, atau database.

TRIGGER TIMING
Terdapat  3 waktu ubtuk sebuah trigger teraktivasi :
·         Before
Dimana sebuah trigger akan teraktivasi sebelum terjadinya proses DML pada table.
·         After
Dimana sebuah trigger akan teraktivasi setelah terjadinya proses DML pada table.
·         Instead  of
Trigger yang hanya berfungsi pada view dan biasanya digunakan untuk mengUpdate data pada view kompleks


Berikut perintah Trigger :
1.      Perintah trigger yang dijalankan sebelum untuk suatu table
CREATE OR REPLACE TRIGGER backup
BEFORE UPDATE ON emp
BEGIN
RAISE_APPLICATION_ERROR(-20001,’Tabel Emp Tidak Dapat Dirubah’);
END;

2.      If-Else Trigger
CREATE OR REPLACE TRIGGER backup2
BEFORE UPDATE DELETE OR INSERT ON emp
BEGIN
IF UPDATING THEN
RAISE_APPLICATION_ERROR(-20001, ‘Tabel Emp Tidak Dapat Dirubah’);
ELSEIF DELETING THEN
RAISE_APPLICATION_ERROR(-20002, ‘Tabel Emp Tidak Dapat Dirubah’);
ELSE
RAISE_APPLICATION_ERROR(-20003, ‘Tabel Emp Tidak Dapat Dirubah’);
END IF;
END
/

3.      Trigger after
CREATE OR REPLACE TRIGGER Konfirmasi
AFTER DELETE OR INSERT OR UPDATE ON Emp
BEGIN
IF DELETING THEN
DBMS_OUTPUT.PUT_LINE (‘Data Telah di Delete’);
ELSEIF UPDATING THEN
DMBS_OUTPUT.PUT_LINE(‘Data Telah di Update’);
ELSEIF  INSERTING THEN
DBMS_OUTPUT.PUT_LINE(‘Data Telah di Insert’);
END IF;
END;
/
4.      Alias di dalam Trigger
CREATE OR REPLACE TRIGGER Validasi
BEFORE INSERT ONE Emp
FOR EACH ROW
BEGIN
IF :new_sal < 2000 THEN
RAISE_APPLICATION_ERROR (-20000,’Gaji Minimal $2000’);
END IF;
END;
/

5.      Membuat trigger dalam DDL Statement
CREATE OR REPLACE TRIGGER BackupData
BEFORE DROP ON SCHEMA
BEGIN
RAISE_APPLICATION_ERROR(-20005,’Tidak diperbolehkan untuk menghapus table pada schema ini’);
END;
/

Database Security dapat dikelompokan menjadi 2 hal:
·         System security
·         Data security
Priveleges
·         Priveleges adalah ha katas sesuatu
·         System priveleges adalah hak akses terhadap database
·         Object priveleges adalah hak untuk memanipulasi isi dari database object
·         Schema adalah kumpulan object, semisal table, view dan sequence

Pembuatan user
CREATE USER user
IDENTIFIED BY password
Contoh :
CREATE USER scott
IDENTIFIED BY TIGER;
User created.

User System Priveleges
Sekali user dibuat, maka DBA memberikan system privilege yang spesifik terhadap user tersebut, yaitu :
CREATE SESSION : untuk burhubungan dengan database
CREATE TABLE : untuk membuat table dalam skema user
CREATE SEQUENCE : untuk membuat sequence
CREATE VIEW : untuk membuat view
CREATE PROCEDURE : untuk membuat procedure

Granting system priveleges
DBA dapat memberi atau grant privilege system terhadap suatu user tertentu
SQL> GRANT create session, create table,
       2 create sequence, create view
       3 TO scott;
Grant succeded

Role adalah  nama dari sekumpulan privilege yang saling berelasi dan diberikan pada user.
Pembuatan dan Granting Privelege sebuah role
Membuat role :
      CREATE ROLE manager;
Grant privilege ke role:
      GRANT create table, create view
      TO manager;
GRANT role ke user:
      GRANT manager TO DEHAAN, KOCHHAR;
Merubah password :
      ALTER USER scott
      IDENTIFIED BY Lion;
     
Object privilege
Object privilege adalah privilege yang sesuai untuk membentuk perlakukan terhadap object database.
Granting Object  Privilege
Grant query privilege pada table EMPLOYEES:
                        GRANT select
ON employees
TO sue, rich;
Grant privilege untuk mengubah kolom yang spesifik terhadap user dan role :
      GRANT update (department_name, location_id)
      ON departments
      TO scott, manager;
Pengguanaan keyword With Grant Option dan Public
Contoh pengguanaan WITH GRANT OPTION :
      GRANT select, insert
      ON departments
      TO scott
      WITH GRANT OPTION;

Menghapus Object Privilege
Untuk menghapus privilege, digunakan perintah REVOKE. Dengan perintah REVOKE, privilege yang diberikan ke user yang lain melalui WITH GRANT OPTION juga akan dihapus.
Missal sebagai user, Alice menghapus privilege SELECT dan Insert yang diberikan untuk user scott pada table DEPARTMENTS.
      REVOKE select, insert
      ON departments
      FROM scott;

Database Link
Koneksi database link memungkinkan local user untuk emngakses data pada remote database.
Untuk mmbuat database link :
CREATE PUBLIC DATABASE LINK hq.acme.com
USING ‘sales’;

Menulis AQL statement yang menggunakan database link :
SELECT *













KESIMPULAN
Stored procedure pada dasarnya adalah sebuah program yang disimpan di dalam database server, karena stored procedure ini dapat menerima suatu input parameter dan output parameter serta dapat menghasilkan suatu message succes atau error.

Function adalah suatu blok PL/SQL yang memiliki konsep sama dengan procedure, hanya saja pada function terdapat pengembalian nilai (return value).
Trigger merupakan store prosedur yang dijalankan secara automatis saat user melakukan modifikasi data pada tabel.
Pengertian Sub Query
Merupakan query yang terletak dalam query yang lain.
Contoh :
Akan ditampilkan nama pegawai yang mempunyai gaji paling besar :
select nama from pegawai where sal = (select max(gaji) from pegawai);  

Trigger timing adalah waktu kapan trigger diaktifkan. Ada tiga macam trigger triming, yaitu :

1.       BEFORE : trigger dijalankan sebelum DML event pada tabel.
2.      AFTER : trigger dijalankan setelah DML event pada tabel.
3.      INSTEAD OF : trigger dijalankan pada sebuah view.






DAFTAR  PUSTAKA

http://risnotes.com/2012/01/mengatur-hak-akses/