Menjalankan banyak Statemen QUERY dengan satu perintah connect

Berbagai macam bahasa pemrograman baik Visual Basic, C++, PHP atau Visual Foxpro membutuhkan koneksi untuk melakukan pengolahan CRUD (Create, Read, Update dan DELETE) terhadap berbagai database seperti MySQL, Oracle atau pun database yang lain.

Setiap satu perintah Query membutuhkan satu kali koneksi agar dapat dijalankan oleh mesin database (database engine). nah, untuk menghemat koneksi atau mempercepat proses tersebut, dan agar banyak perintah (query-multi-statements / QMS) dapat dijalankan dalam satu kali koneksi ke database dibutuhkan sebuah PROCEDURE yang dapat menjalankan banyak perintah dalam satu waktu (satu kali koneksi atau pemanggilan koneksi). Proses akan menjadi lebih cepat karena langsung dijalankan di engine nya.

Kode dibawah ini merupakan sebuah procedure yang saya buat pada database MySQL untuk menjalankan banyak perintah yaitu:

 

delimiter //
CREATE PROCEDURE invoice_buat (IN asql1 TEXT,IN asql2 TEXT,
IN cidlogon VARCHAR(36))
BEGIN
  SET @a=asql1;
  PREPARE bsql FROM @a;
  EXECUTE bsql;
 
  SET @b=asql2;
  PREPARE bsql FROM @b;
  EXECUTE bsql;
 
  INSERT INTO loguser_detail
  (idlogon,aud,catatan)
  values (cidlogon,"1",asql1);
 
  DELETE FROM jual_temp WHERE idlogon=cidlogon;
END//

perintah tersebut diatas dapat dipanggil sebagai berikut:

call invoice_buat('insert into order (noorder,idlogon) values ("123","admin")',
'insert into order_list(noorder,kdbrg,unit,harga) select "123",kdbrg,unit,harga from jual_temp where idlogon="admin"',
"admin");

dari perintah diatas parameter asql1 digunakan untuk membuat nomor order yang baru, sedangkan parameter asql2 digunakan untuk mengisi tabel order_list, perintah delete pada prosedur berfungsi untuk menghapus file temporer berdasarkan idlogon.

Sedangkan perintah INSERT INTO loguser_detail digunakan untuk menyimpan audit trail atas semua perintah-perintah yang telah diberikan ke dalam tabel.

Jadi prosedur diatas sekali panggil / konek dapat melakukan 4 perintah sekaligus. Mudah2an dengan teknik ini bisa mempercepat lagi proses pengolahan data yang dilakukan oleh program.

Selamat mencoba.

ayojoin

* Dipersembahkan buat http://fox-id.org khususnya tn. Foxy dan RND.

:2thumbup

Tambahan:

untuk odbc driver versi 5.3 ke atas agar dapat menjalankan banyak query dalam satu connect maka pada perintah connect ke databasenya ditambahkan menjadi sebagai berikut: (Microsoft Visual FoxPro)

 

lcl_cstr="DATABASE=mydata;SERVER=localhost;port=3306;UID=root; pwd=admin;"+;
"option=67108864;DRIVER={MySQL ODBC 5.3 ANSI Driver};"

8 thoughts on “Menjalankan banyak Statemen QUERY dengan satu perintah connect”

  1. Met Sore Pak Yanto, Maaf Kemaren Salah Forum :
    mo minta tolong nih:
    Koding untuk perhitungan denda berdasarkan tgl Jttempo (VFP 9)
    sample case :
    No_reg ! No_kwt ! Bayar ! Tgl_jt ! Tgl_byr ! Denda ! Juml_hari ! Reff
    001 ! ea001 ! 200000 ! 12/10/17 ! 15/10/17 ! 0 ! 3 ! 000101
    002 ! ea010 ! 150000 ! 10/08/17 ! 15/10/17 ! 66000 ! 66 ! 000102
    002 ! ea011 ! 150000 ! 10/09/17 ! 15/10/17 ! 35000 ! 35 ! 000103
    002 ! ea012 ! 150000 ! 10/10/17 ! 15/10/17 ! 0 ! 0 ! 000104
    003 ! ea002 ! 250000 ! 02/07/17 ! 15/10/17 ! 105000 ! 105 ! 000105
    004 ! ea005 ! 100000 ! 16/10/17 ! 15/10/17 ! 0 ! 0 ! 000106
    dari sample case diatas hendak saya kurangkan 10% sebagai reward hasil penagihan, dengan catatan penagihan lebih dari 3 hari akan dikenakan denda 0,5% dari total bayar atau minimal 1000, bila terlambat 3bln atau lebih, bila dibayar tunggakannya sampai normal atau tanpa ada keterlambatan lagi reward diberikan kepada petugas tagihnya, koding yg saya pakai memang memberikan solusi seperti yg saya kehendaki, tapi untuk case No_reg 003 ada kendala yakni masih memberikan reward 10% dari tagihan atau sebesar 10500, padahal nasabah belum lancar dalam pembayaran atau masih ada tunggakan pembayaran selama 3 bulan.
    Dari sini saya minta saran Pak Yanto Koding / Script yg benar dalam penyelesaian Masalah saya ini Pak. (alamat Email n6633cx@gmail.com)
    Atas Perhatian dan saran serta masukannya saya ucapkan Terima Kasih
    Ronnie – Malang :salaman

  2. @ronnie: coba sy lihat scriptnya mungkin pada script yg anda buat ada sedikit kesalahan, karena menurut keterangan anda, semua sudah ok, hanya untuk kasus yang nomor 003 yg belum ok…
    :cool

  3. pagi Kak Yanto :
    maksud saya agar terjadi pembatasan mengenai pemberian fee tagihan dengan syarat bila keterlambatan lebih dari 40 hari dan semua tunggakan terbayar normal atau lancar, tanpa ada tagihan lagi yg benar seperti apa kodingnya, selama ini saya pakai koding, dari sample chase diatas saya ambil dari dbf feetagihan :
    select distinct feetagihan.no_reg, feetagihan.no_kwt, feetagihan.denda, feetagihan.juml_hari as ;
    telat, val(str(0000000)) as fee from feetagihan order by feetagihan.noreg into cursor tempfee
    kodingnya pengisian fee di cursor tempfee sebagai berikut :
    select tempfee
    do while not eof()
    select feetagihan
    locate for feetagihan.no_reg = tempfee.no_reg
    if found()
    if juml_hari = 40
    replace tempfee.fee with ;
    tempfee.denda * 0.1
    endif
    endif
    fee dalam tempfee keluar semua,
    terutama ** terjadi keterlambatan 3 bulan dan terbayar 1x masih ada tunggakan 2 bulan belum bayar, keluar fee 10.500, berdasarkan statement seharusnya tidak muncul (bila semua tunggakan terselesaikan maka fee bulan lalu bisa dikeluarkan / tunggakan 0)?,
    di asterik * fine aja seperti yg saya harapkan kak Yanto?

    Ronnie – Malang :salaman

  4. terpotong lagi kodingnya :
    select tempfee
    do while not eof()
    select feetagihan
    locate for feetagihan.no_reg = tempfee.no_reg
    if found()
    if juml_hari >= 40
    replace tempfee.fee with ;
    tempfee.denda * 0.1
    endif
    endif
    Yang saya inginkan pembatasan fee bila nunggak belum terbayar sampe lunas / tunggakan 0 fee bisa diberikan?

  5. bila koding saya rubah :
    select tempfee
    do while not eof()
    select feetagihan
    locate for feetagihan.no_reg = tempfee.no_reg
    if found()
    if juml_hari <= 40
    replace tempfee.fee with ;
    tempfee.denda * 0.1
    endif
    endif
    tunggakan di no_reg 003 memang gak muncul, kendala di No_reg 002 no_kwt ea010 gak muncul sebesar 6.600 (nasabah bayar tunggakan sampai 0 / tanpa tunggakan), Bagaimana mengatasinya kak Yanto?

  6. dari kasus di atas, coba buatkan kolom manual di excel dengan menambahkan 1 kolom untuk fee dulu, kemudian isi manual dengan penjelasan misalkan untuk no_reg 001 berisikan 500 hal ini dikarenakan……. dst, dst sehingga bisa ditemukan pola logika yang anda inginkan. kemudian coba kirimkan ke email: ARNILA2008@GMAIL.COM

  7. gee..thanks Kak Yanto?
    coba saya bikin dulu kak? sapa tau ketemu script yg benar atas masalah saya?

Leave a Reply

Your email address will not be published. Required fields are marked *

[+] kaskus emoticons nartzco

What is 10 + 2 ?
Please leave these two fields as-is: