Posts tagged Oracle
Create MD5 function di Oracle
Jan 23rd
Suatu ketika saya ada keperluan menggunakan fungsi MD5 di oracle. karena mencari-cari fungsi built in di oracle tidak ketemu, atau mungkin tidak ada akhirnya saya memutuskan untuk membuat Java Store Procedure. Untuk mempelajari lebih detail langkah-langkah membuat java store procedure anda bisa melihat postingan sebelumnya Java Store Procedure .
Langkah pertama membuat fungsi md5 di java
import java.security.MessageDigest; public class MD5 { public static String getMD5(String message) { try { MessageDigest md = MessageDigest.getInstance("MD5"); String md5string=""; StringBuffer sb = new StringBuffer(); byte buf[] = message.getBytes(); byte[] md5 = md.digest(buf); System.out.println(message); for( int i = 0 ; i < md5.length ; i++ ) { String tmpStr = "0"+Integer.toHexString( (0xff & md5[i])); sb.append(tmpStr.substring(tmpStr.length()-2)); } md5string = sb.toString(); return (md5string); } catch (Exception e) { System.out.println(e); return "0"; } } }
Kemudian kita compile
#javac MD5.java
Jika tidak ada error akan menghasilkan MD5.class, kemudian kit aload ke oracle
loadjava -resolve -user scott/tiger MD5.class
Publish fungsi Java Store Procedure dengan membuat interface di oracle :
CREATE OR REPLACE FUNCTION GetMD5(str in varchar) RETURN VARCHAR2 as LANGUAGE JAVA NAME 'MD5.getMD5(java.lang.String) return java.lang.String';
kemudian kita coba
select GetMD5('gatotkaca') from dual;
GETMD5('gatotkaca')
============================
4495ca9b8bb44554754c5ed33a33fef9
selamat mencoba !!!
semua script yang ada pada halaman ini bisa anda download di sini
More >SqlPlus dengan History di Linux
Jan 6th
Paling frustasi kalau pake sqlplus, sudah ketik syntax panjang-panjang, waktu dieksekusi ada yang salah, ngetik lagi deh dari awal. Soalnya tidak ada history buat command yang sudah dijalankan. Tidak bisa diedit lagi command yang sudah kita ketik. Solusinya cuma di backspace. Tapi tenang saja, ada solusinya agar sqlplus juga punya kemampuan buat menyimpan history command, seperti Shell Bash di Linux. Yang kita perlukan hanyalah sebuah aplikasi yang bernama rlwrap. Install dulu rlwrap untuk operating system anda. Dalam contoh ini yang digunakan adalah openSUSE 10.3 yang bisa didapatkan dari http://download.opensuse.org/repositories/openSUSE:/10.3/standard/i586/rlwrap-0.28-27.i586.rpm. Setelah diinstal kita tinggal menjalankan perintah rlwrap dengan parameternya yaitu sqlplus:
oracle@NeuronServer:~> rlwrap sqlplus
Sqlplus yang terbuka akan memiliki kemampuan menyimpan history command dan line editing sederhana. Gunakan tombol panah atas dan bawah untuk mengakses perintah yang sudah kita jalankan. Kita juga bisa mengedit perintah itu dengan menggeser kursor menggunakan tombol panah kanan dan kiri. Agar konfigurasi rlwrap tadi terus dijalankan setiap login kita gunakan saja fungsi alias dari shell agar setiap kali sqlplus dijalankan yang dipanggil adalah perintah rlwrap dengan parameter sqplus-nya. Buka file .bash_profile yang ada di direktori home user oracle atau user yang dapat menjalankan perintah sqlplus:
oracle@NeuronServer:~> vi ~/.bash_profile
dan tambahkan baris berikut:
alias sqlplus='rlwrap sqlplus'
Cara lainnya dengan menjalankan perintah echo yang menambahkan baris diatas langsung di baris terakhir file .bash_profile:
oracle@NeuronServer:~> echo "alias sqlplus='rlwrap sqlplus'" >> ~/.bash_profile
Semoga bermanfaat and have a More >
Oracle Cursor dan Ref Cursor
Jan 6th
Definisi Cursor Dalam blok PL/SQL tidak mengijinkan kita membuat query yang menghasilkan lebih dari satu baris untuk ditampung dalam sebuah variabel. Variabel semacam ini dinamakan cursor. Kegunaan
- Untuk menerima hasil query yang jumlah barisnya lebih dari 1 baris
- Memungkinkan untuk melakukan proses yang lebih kompleks untuk setiap record
Macam2 Cursor Cursor : cursor eksplisit dan cursor implisit
- Cursor Eksplisit : Cursor yang harus dideklarasikan terlebih dahulu sebelum digunakan
Contoh :
DECLARE CURSOR c_nama IS SELECT nama_petugas FROM pegawai ORDER BY nama_petugas ASC; v_nama PETUGAS.nama_petugas%TYPE; /**%TYPE agar tipe data variabel v_nama sama dengan kolom nama_petugas?*/ BEGIN FOR X IN c_nama LOOP DBMS_OUTPUT.PUT_LINE (c_nama%ROWCOUNT ||'Daftar Nama Petugas : ' || x.nama_petugas); END LOOP; END;
DECLARE id VARCHAR2(10); vnama_petugas PETUGAS.nama_petugas%TYPE; BEGIN id := 'PG-010'; //assigment VALUE SELECT nama_petugas INTO vnama_petugas FROM PETUGAS WHERE id_petugas = id; IF SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('Data ditemukan'); ELSE DBMS_OUTPUT.PUT_LINE ('Nama petugas dengan id : ' || id || 'adalah ' || vnama_petugas); END IF; END;
Ref Cursor Kita dapat menggunakan ref cursor untuk mengembalikan nilai dalam bentuk recordset/cursor di store procedure. Ada 2 tipe ref cursor :
- Strong ref cursor : tipe data dan panjangnya harus diketahui saat compile
- Weak ref cursor : tipe data dan panjangnya tidak dibutuhkan saat compile
Contoh :
DECLARE TYPE r_cursor IS REF CURSOR; c_emp r_cursor; en emp%rowtype; BEGIN OPEN c_emp FOR SELECT * FROM emp; loop fetch c_emp INTO en; exit WHEN c_emp%notfound; dbms_output.put_line(c_emp%rowcount ||'. '||en.nama); END loop; close c_emp; More >
Membackup Schema Oracle Secara Otomatis
Jan 5th
Sebelumnya kita sudah mencoba membackup schema oracle menggunakan exp. Kita bisa memanfaatkannya untuk membuat sebuah sistem penjadwalan yang secara otomatis membackup schema tersebut pada waktu yang telah ditentukan. Tool yang digunakan selain Shell dan exp juga crontab. Crontab merupakan aplikasi penjadwalan di mesin Unix dan Linux. Crontab bekerja sebagai daemon atau service cron yang setiap waktu akan mengecek apakah ada job atau tugas yang harus dilakukan pada waktu itu. Crontab menyimpan entri untuk setiap penjadwalan seperti ini:
* * * * * /home/alam/someScript.sh
Kolom pertama menunjukan menit dimana entri tersebut akan dijalankan. Kolom kedua untuk jam, kolom ketiga untuk tanggal, kolom keempat untuk bulan, kolom kelima untuk untuk hari, dan kolom terakhir menunjukan perintah apa yang akan dijalankan. Dari contoh diatas berarti setiap menit, setiap hari, setiap bulan cron akan menjalankan script tersebut. Pertama-tama kita buat dulu script sederhana, train-backup.sh yang berfungsi untuk membackup schema tersebut. Script tersebut akan membackup schema-nya di directory yang sudah ditentukan dengan nama file yang berbeda berdasarkan kapan schema tersebut dibackup.
The Script#!/bin/sh #script to backup oracle schema based on time when it saved #initializing variables export PATH=$PATH:/app/oracle/product/10.2/bin export ORACLE_BASE=/app/oracle export ORACLE_HOME=/app/oracle/product/10.2 export ORACLE_SID=neuron export BASEDIR=$HOME/train-backup export DTM=`date +%Y%m%d-%H%M%S` export UNAME=train export PASSWD=train export FILENAME=train # command section cd $BASEDIR exp $UNAME/$PASSWD file=$FILENAME-$DTM.dmp exit
Jangan lupa beri execute permission dengan:
alam@NeuronServer:~> chmod +x train-backup.sh
Script-nya cukup sederhana kan? Yang perlu dilakukan hanyalah inisialisasi variabel:
export PATH=$PATH:/app/oracle/product/10.2/bin export ORACLE_BASE=/app/oracle export ORACLE_HOME=/app/oracle/product/10.2 export ORACLE_SID=neuron export BASEDIR=$HOME/train-backup export DTM=`date +%Y%m%d-%H%M%S` export UNAME=train export PASSWD=train export FILENAME=train
dan perintah backup More >
Backup dan Restore Schema Oracle Menggunakan exp dan imp
Dec 31st
Oracle menyediakan perintah untuk membackup schema dan merestore schema hasil backup tersebut. Kedua perintah tersebut yaitu exp untuk membackup schema dan imp untuk merestore schema hasil backup sebelumnya. Kita coba dengan backup terlebih dahulu. Pertama kita buat direktori backup untuk menampung hasil backup schema yang kita lakukan, kemudian kita gunakan direktori tersebut sebagai base direktori pekerjaan kita:
oracle@NeuronServer:~> mkdir schema-backup oracle@NeuronServer:~> cd schema-backup/ oracle@NeuronServer:~/schema-backup>
Misalnya kita ingin membackup schema train yang memiliki password train yang ada di server oracle dengan service id neuron, file backup schema-nya kita simpan dengan nama train.dmp. Penggunaan perintah exp-nya seperti dibawah ini:
oracle@NeuronServer:~/schema-backup> exp train/train@neuron file=train.dmp Export: Release 10.2.0.1.0 - Production on Fri Jan 2 16:17:32 2009 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Export done in US7ASCII character set and AL16UTF16 NCHAR character set server uses WE8ISO8859P1 character set (possible charset conversion) . exporting pre-schema procedural objects and actions . exporting foreign function library names for user TRAIN . exporting PUBLIC type synonyms . exporting private type synonyms . exporting object type definitions for user TRAIN About to export TRAIN's objects ... . exporting database links . exporting sequence numbers . exporting cluster definitions . about to export TRAIN's tables via Conventional Path ... . . exporting table TRAIN 2 rows More >