Nanda's Blog

Share a smile, Share information

SQL Dinamis pada Store Procedure MySQL February 23, 2011

Filed under: MySQL,Pemrograman,PL/SQL — nanda @ 6:22 pm

Well, ini merupakan pembahasan mengenai penggunaan SQL dinamis pada sebuah store procedure MySQL.

Beberapa statement store procedure MySQL dapat dibuat dinamis, karena MySQL memungkinkan untuk menjalankan SQL dinamis pada sebuah procedure (tapi tidak pada trigger atau function). Sebuah statement SQL dinamis dibangun saat runtime, sedangkan SQL statis pada saat kompilasi program. Umumnya SQL dinamis diperlukan saat admin tidak memiliki cukup informasi yang diperlukan untuk melengkapi statement yang dibuat saat kompile. Admin perlu informasi masukkan dari pengguna atau sumber data lainnya.

Cara kerja SQL dinamis hampir sama dengan cara kerja SQL statis, adapun perbedaanya

  • SQL dinamis tidak mengeksekusi klausa into
  • Tidak dapat mendefinisikan statement pada declare cursor.

SQL dinamis dapat digunakan hanya jika memang diperlukan , karena SQL dinamis bersifat lebih kompleks dan kurang efisien dibanding SQL statis. Keuntungan SQL dinamis adalah memungkinkan untuk membuat statement lebih berguna karena bersifat lebih general. SQL dinamis akan berguna saat dihadapkan pada sebuah keadaan membangun statement SQL berdasarkan input pengguna.

CREATE PROCEDURE set_value
       (in_table     VARCHAR(128),
        in_column    VARCHAR(128),
        in_new_value VARCHAR(100),
        in_where     VARCHAR(100))
BEGIN
   DECLARE l_sql VARCHAR(1000);
   SET l_sql=CONCAT_ws(' ',
               'UPDATE',in_table,
                  'SET',in_column,'=',in_new_value,
               ' WHERE',in_where);
   SET @sql=l_sql;
   PREPARE s1 FROM @sql;
   EXECUTE s1;
   DEALLOCATE PREPARE s1;
END;

Program diatas perlu deklarasi parameter yang akan digunakan sebelum masuk ke inti program. Setelah itu mendeklarasikan sebuah nilai untuk menampung perintah update yang akan dilakukan. Sebuah statement dapat dinamis dengan menggunakan fungsi string CONCAT yang memiliki fungi menggabungkan dua field / lebih yang bertipe string menjadi satu. Fungsi penggabungan string di Mysql ada 2 jenis, yaitu concat() dan concat_ws(). Perbedaannya terletak pada jika menggunakan concat() tidak perlu menggunakan separator antar string yang digabungkan, sedangkan bila  concat_ws() menggunakan separator antar string yang digabungkan. Contoh penggunaanya dapat dilihat dibawah ini.

SELECT CONCAT(‘First name’,'Second name’);
 Output -> First nameSecond name
mysql> SELECT CONCAT_WS(‘ ‘,’First name’,’Second name’);
 Output -> First name Second name

 

Contoh diatas digunakan perintah update jadi dapat dilihat dalam perintah update tidak ada klause into sehingga dapat dibuat dinamis. MySQL mendukung fasilitas yang dikenal sebagai server-side prepared statements, yang menyediakan APIindependent way (API berfungsi sebagai interface antara software yang berbeda dan memfasilitasi interaksi mereka) dengan menyiapkan pernyataan SQL yang akan dieksekusi berulang dengan efisien dan aman. Prepared statements yang digunakan sangat menarik karena statement tersebut mngijinkan pembuatan SQL. Pembuatan prepared statement terlihat pada kode program dibwah ini.

PREPARE statement_name FROM sql_text

Setelah prepared statement siap maka siap dieksekusi dengan pernyataan, EXECUTE.

EXECUTE  statement_name

Setelah pernyataan berhasil dieksekusi maka untuk menghapus nilai dari pernyataan sebelumnya digunakan  pernyataan DEALLOCATE.

DEALLOCATE PREPARE statement_name
 

2 Responses to “SQL Dinamis pada Store Procedure MySQL”

  1. jeruktutut Says:

    permisi mbak nanda
    saya mau tanya

    dari tulisan yang anda buat diatas, setelah saya coba, kenapa hasilnya Unknown prepared statement handler (s1) given to EXECUTE??
    kira-kira bagaimana ya??

    terima kasih

  2. Abu Hira Says:

    Error itu muncul karena menggunakan EXECUTE pada saat manggil PROCEDURE-nya, coba ganti dengan CALL. Jadi selengkapnya : CALL nama_prosedurnya

    Demikian semoga membantu


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s