Category Archives: SQL and PL/SQL

Trigger: Mencatat History Startup & shutdown DB

Kita bisa mengetahui kapan database shutdown dan kapan database startup, biasanya dengan melihat di alert log. Lebih detail tentang alert log saya bahas di Maintenance Log dan Trace File. Namun kita perlu usaha ekstra untuk membaca alert log. Untuk mempermudahnya, kita bisa membuat trigger yang mencatat setiap aktivitas (startup dan shutdown) ke tabel history.

Catatan: Untuk melakukan ini, gunakanan user yang punya privilege DBA (misalnya SYS atau SYSTEM).

Langkah pertama, siapkan tabel untuk mencatat history startup dan shutdown.

create table tbl_database_activity
(waktu		DATE,keterangan	varchar2(8))
tablespace users;

Selanjutnya buat Trigger yang dijalankan sebelum database shutdown. Penting: Shutdown abort tidak akan … Continue reading

Posted in Administration, SQL and PL/SQL | Tagged , , , , , | 3 Comments

Menjalankan OS Command atau Shell Script dari PL/SQL

Menjalankan OS Command atau shell script dari SQLPlus sudah biasa kita lakukan. Biasanya kita menggunakan ! atau host (catatan: di Windows hanya bisa pakai host, tidak bisa pakai !), contoh:

SQL> ! ls -la
SQL> ! /data1/oracle/Users/rohmad/test.sh
SQL> host ls -al
SQL> host /data1/oracle/Users/rohmad/test.sh

Namun ini hanya berlaku:

  • OS command ini eksekusi di mana kita menjalankan SQL Plus.
  • OS command yang dijalankan adalah OS command di mana kita menjalankan SQL Plus. Misalnya kita menjalankan SQLPlus di PC kita, maka OS command yang dijalankan adalah OS command yang ada di PC kita, bukan OS command di mesin/server database

Tantangan … Continue reading

Posted in SQL and PL/SQL | Tagged , , , | 1 Comment

PL/SQL: Memasukkan Variabel dalam Prosedur

Sebagaimana prosedur dalam bahasa pemrograman lain, kitapun bisa memasukkan variabel ke dalam prosedur. Lihat contoh prosedur PROC_REFRESH_MYTAB yang lalu

create or replace procedure PROC_REFRESH_MYTAB as
V_rcg_min NUMBER;
v_rcg_max number;
V_iterasi NUMBER;
v_date	  DATE;
BEGIN
V_rcg_min := 10;
v_rcg_max := 100;
V_iterasi := V_rcg_min;
V_DATE    := sysdate;
EXECUTE IMMEDIATE 'truncate table MYTAB';
WHILE V_iterasi <= v_rcg_max LOOP
insert into MYTAB values (v_date, V_iterasi);
commit;
v_date   := v_date+1;
V_iterasi:= V_iterasi+1;
END LOOP;
END;
/

Dalam contoh di atas, nilai v_rcg_min dan v_rcg_max dimasukkan dalam hard code. Kalau kita mau mengubah nilai rcg_id minimum dan maksimum, ya mesti mengubah code lagi. Cappe deh … Continue reading

Posted in SQL and PL/SQL | Tagged , , , , | Leave a comment

PL/SQL: Membuat Prosedur

Tulisan ini merupakan lanjutan dari dasar-dasar pengenalan PL/SQL yang telah saya tulis sebelumnya, yaitu contoh penggunaan PL/SQL dan Struktur PL/SQL.

Prosedur merupakan subprogram PL/SQL yang berdiri sendiri. Kalau kita punya pekerjaan rutin dan command-commandnya pun itu-itu saja, kita bisa menyimpan comand-command tersebut dan memanggilnya kapan saja kita mau. Itulah filosofi dari prosedur.

Cara Membuat Prosedur

Caranya sama persis dengan membuat blok PL/SQL biasa, cuma ganti :
DECLARE Menjadi :
create or replace procedure NAMA_PROSEDUR as

User yang membuat prosedur harus punya privilege “create procedure”. Contoh, memberi privilege kepada user ROHMAD agar bisa membuat prosedur
SQL> conn SYSTEM
SQL> grant
Continue reading

Posted in SQL and PL/SQL | Tagged , , , , | 3 Comments

Pivot Query: konversi row ke column

Inti pivot query adalah menampilkan data row menjadi column. Contoh praktisnya, saya punya data berikut ini

create table trx(PART varchar2(1), TRX_DATE date,
DOC_NO varchar2(10), TRX_CODE varchar2(1), AWAL number,
TRX_QTY number,AKHIR number);
Continue reading

Posted in SQL and PL/SQL | Tagged , , , , | 5 Comments