Posts tagged Oracle

Send Email using PL/SQL

0

Email merupakan service yang sering kita gunakan, terkadang kita membutuhkan notifikasi email jika ada sesuatu yang berkaitan dengan kita, Nah sekarang kita mencoba mengirim Email dari PL/SQL berikut langkah-langkah yang perlu dilakukan.
1. Prasyarat
Pertama didatabase oracle kita harus sudah terinstall paket UTL_SMTP.paket ini mulai dikenalkan pada oracle versi 8.1.7, jika belum ada anda dapet menginstall dari source nya yang berada pada direktori {ORACLE_HOME}/rdbms/admin/utlsmtp.sql.
Anda harus mempunyai pengetahuan tentang protokol SMTP.

2. Membuat program PL/SQL untuk Konek ke SMTP
Berikut adalah contoh script PL/SQL untuk membangun koneksi ke server SMTP

CREATE OR REPLACE FUNCTION SMTP_CONNECT (
   pIn_smtp_host IN VARCHAR2,
   pIn_smtp_port IN INTEGER,
   pIn_domain     IN VARCHAR2,
   pIn_username  IN VARCHAR2,
   pIn_password  IN VARCHAR2)
RETURN UTL_SMTP.CONNECTION
AS
v_conn UTL_SMTP.CONNECTION;
BEGIN
   v_conn := UTL_SMTP.OPEN_CONNECTION (pIn_smtp_host,pIn_smtp_port);
   UTL_SMTP.HELO(v_conn,pIn_domain);
   UTL_SMTP.command (v_conn, 'AUTH LOGIN');
   UTL_SMTP.command (v_conn, pIn_username);
   UTL_SMTP.command (v_conn, pIn_password);

RETURN v_conn

EXCEPTION WHEN OTHERS
RETURN NULL;

END SMTP_CONNECT;

pIn_username dan pIn_password merupakan account email dan password yang sudah di base64 encoding, untuk lebih mudahnya anda bisa melakukan encode di level oraclenya. Fungsi untuk membangun koneksi ke smtp sudah berhasil kita buat selanjutnya kita buat fungsi untuk memgirim pesan.

3. Membuat fungsi untuk send Message

Mengirim pesan di smtp cukup simple berikut sample PL/SQL untuk send message

CREATE OR REPLACE PROCEDURE SMTP_SEND (
   pIn_conn      IN  OUT NOCOPY  UTL_SMTP.CONNECTION,
   pIn_sender    IN VARCHAR2,
   pIn_recipient IN VARCHAR2,
   pIn_subject   IN VARCHAR2,
   pIn_message IN VARCHAR2)
AS
BEGIN
   UTL_SMTP.MAIL (pIn_conn,pIn_sender);
   UTL_SMTP.RCPT(pIn_conn,pIn_recipient);
   UTL_SMTP.OPEN_DATA (pIn_conn);
   UTL_SMTP.WRITE_DATA (pIn_conn, 'From: '||pIn_sender  || UTL_TCP.CRLF);
   UTL_SMTP.WRITE_DATA (pIn_conn, 'To: '||pIn_recipient  || UTL_TCP.CRLF);
   UTL_SMTP.WRITE_DATA (pIn_conn, 'Subject: '||pIn_subject  || UTL_TCP.CRLF);

      -- Set priority:
      --   High      Normal       Low
      --   1     2     3     4     5
   UTL_SMTP.WRITE_DATA (pIn_conn, 'X-Priority: 1'  || UTL_TCP.CRLF);
   UTL_SMTP.WRITE_DATA (pIn_conn, pIn_message);
END SMTP_SEND;

prosedur untuk mengirim data sudah kita lakukan, berikutnya adlah fungsi untuk close connection

4. CLosed Connection

sekarang kita buat fungsi untuk menutup koneksi SMTP

CREATE OR REPLACE PROCEDURE SMTP_CLOSED (
  pIn_conn    IN OUT NOCOPY UTL_SMTP.CONNECTION
)
AS
BEGIN
  UTL_SMTP.CLOSE_DATA(pIn_conn);
  UTL_SMTP.QUIT (pIn_conn);
END SMTP_CLOSED;

jika semua fungsi dan prosedur diatas sudah selesai dicompile saatnya kita coba buat script untuk menguji mengirim email

DECLARE
v_conn UTL_SMTP.CONNECTION;
BEGIN
  v_conn := SMTP_CONECT(
   pIn_smtp_host => 'smtp.nailuvar.com',
   pIn_smtp_port => 25,
   pIn_domain     => 'nailuvar.com',
   pIn_username  => 'xxxxxxx=',
   pIn_password  => 'GDAJAKDY='); 

-- silahkan diganti dengan data di server anda
  SMTP_SEND (
    pIn_conn       => v_conn,
    pIn_sender    => 'massri@nailuvar.com',
    pIn_recipient => 'massri@gmail.com',
    pIn_subject  => 'Test Send Mail',
    pIn_message => 'Ini pesannya silahkan di baca ... '
  );

   SMTP_CLOSED (pIn_conn ==> v_conn);

END;

selesai selamat mencoba ….

Write Query result to File

0

Jika kita ingin menyimpan hasil suatu query ke file dalam format csv salah satu cara yang biasa dilakukan adalah menggunakan PL/SQL (UTL_FILE). Beikut saya tuliskan contoh sederhana untuk menampilkan data EMPLOYEES dari Schema HR ke format csv.

1. Membuat Directory virtual di Oracle

mulai oracle versi 9i untuk bisa mengakses direktori OS di oracle kita harus membuat direktori itu yang berrelasi dengan direktori OS, sebagai contoh untuk penyimpanan file kita akan tempatkan di direktori OS /home/oracle/utl_file_dir

CREATE DIRECTORY UTL_FILE_DIR AS '/home/oracle/utl_file_dir' 

Perintah ini akan membuat Directory di Oracle dengan nama UTL_FILE_DIR. Nama ini tidak harus sama dengan nama direktori di OS.

untuk mengecek bisa melakukan query ke ALL_OBJECTS

SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE = 'DIRECTORY' 

2. Memberikan Hak Akses Direktory ke User

GRANT READ ON DIRECTORY UTL_FILE_DIR TO HR
GRANT WRITE ON DIRECTORY UTL_FILE_DIR TO HR

3. Membuat Procedure untuk menuliskan data ke file


CREATE OR REPLACE PROCEDURE SAVE_EMP

AS

v_handle  UTL_FILE.FILE_TYPE;

v_dirname VARCHAR2(40) := 'UTL_FILE_DIR';

v_filename VARCHAR2(40) := 'emp.csv';

v_data      VARCHAR2(255);

CURSOR C1 IS SELECT first_name, last_name from EMPLOYEES;

BEGIN

v_handle := UTL_FILE.FILE_OPEN(v_dirname,v_filename,'w');

OPEN C1;

LOOP

FETCH C1 into v1,v2;

EXIT WHEN C1%NOTFOUND;

v_data := v1||','||v2;

UTL_FILE.PUT_LINE(v_handle,v_data);

END LOOP;

UTL_FILE.FCLOSE;

EXCEPTION

WHEN OTHERS THEN

UTL_FILE.FCLOSE_ALL;

END SAVE_EMP;

selamat mencoba … :D

Call Store Procedure dari Java

0

Sebagai contoh saya mempunyai package oracle seperti dibawah ini
Secara umum format pemanggilan procedure di java dapat dilihat pada template coding dibawah ini :

CallableStatement cs;
try {
    Memanggil prosedur tanpa parameter
    cs = connection.prepareCall("{call myproc}");
    cs.execute();

  // Pemanggilan procedure dengan nama myprocin dengan satu parameter
    cs = connection.prepareCall("{call myprocin(?)}");

    // Set nilai parameter
    cs.setString(1, "a string");

    // Execute the stored procedure
    cs.execute();

  // Call a procedure with one OUT parameter
    cs = connection.prepareCall("{call myprocout(?)}");

    // Register the type of the OUT parameter
    cs.registerOutParameter(1, Types.VARCHAR);

    // Execute the stored procedure and retrieve the OUT value
    cs.execute();
    String outParam = cs.getString(1);     // OUT parameter

  // Call a procedure with one IN/OUT parameter
    cs = connection.prepareCall("{call myprocinout(?)}");

    // Register the type of the IN/OUT parameter
    cs.registerOutParameter(1, Types.VARCHAR);

    // Set the value for the IN/OUT parameter
    cs.setString(1, "a string");

    // Execute the stored procedure and retrieve the IN/OUT value
    cs.execute();
    outParam = cs.getString(1);            // OUT parameter
} catch (SQLException e) {
}

berikutnya kita coba dengan sample menmanggil oracle procedure.

Change tablespace pada Table

0

Jika anda ingin mengubah storage table yang semua berada di tablespace A ingin anda pindahkan ke tablespace B berikut langkah-langkah untuk melakukan hal diatas.
contoh disini saya akan menggunakan sqlplus saja tidak menggunakan Toad atau Sql Developer.

Langkah Pertama

Konek ke skema database dimana table akan di ubah tablespacenya.Sebagai contoh saya akan mengubah tablespace dari table TH dari tablespace DATA ke tablespace CORE_CRM_TRX.

$ sqlplus hr/hr@sid
SQL> select tablespace_name from all_tables where table_name = 'TH';
TABLESPACE_NAME
------------------
DATA

Langkah Kedua

 SQL> alter table th move tablespace CORE_CRM_TRX;
Table altered

Langkah Ketiga

Konek ke skema database dimana table akan di ubah tablespacenya.Sebagai contoh saya akan mengubah tablespace dari table TH dari tablespace DATA ke tablespace CORE_CRM_TRX.

SQL> select tablespace_name from all_tables where table_name = 'TH';
TABLESPACE_NAME
------------------
CORE_CRM_TRX

Sekarang table TH sudah menggunakan tablespace CORE_CRM_TRX.

Go to Top