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};"

18 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?

  8. supaya tidak tampil di tempfee
    maka pada baris 13-14 (perintah SQL)
    DI EXCEL tambahkan saja where
    WHERE BULAN.TERBAYAR<BULAN.TELAT
    silahkan di coba dulu….

  9. thankz Kak Yanto….
    1 Hal Lagi? mengenai Forum Fox-id ingin jadi member koq belom di approve yach?

  10. Kak Yanto, mohon arahan apa yang harus kita buat untuk menjalankan program single user menjadi multi user. terima kasih

  11. script saya jalankan seperti ini Kak Yanto :
    SELECT distinct ;
    feetagih.no_reg, ;
    feetagih.no_kwt, ;
    feetagih.jum_hari, ;
    feetagih.denda, ;
    VAL(STR(000000000)) ;
    as fee ;
    FROM feetagih ;
    WHERE feetagih.tgl_bayar > ;
    feetagih.tgl_jt ;
    ORDER BY ;
    feetagih.no_reg ;
    INTO CURSOR tempfee READWRITE
    thisform.grid1.RecordSource = ‘tempfee’

    SELECT tempfee
    DO WHILE NOT EOF()
    IF tempfee.jum_hari >= 4
    REPLACE tempfee.fee WITH ;
    tempfee.denda * 0.1
    ENDIF
    SELECT tempfee
    SKIP
    ENDDO

  12. cursor tempfee sbb:
    no_reg ! no_kwt ! jum_hari ! denda ! fee
    001 ! ea001 ! 3 ! 0 ! 0
    002 ! ea010 ! 66 ! 66000 ! 6600
    002 ! ea011 ! 35 ! 35000 ! 3500
    002 ! ea012 ! 5 ! 5000 ! 500
    003 ! ea002 ! 105 ! 105000 ! 10500
    no_reg 001 terlambat 3 hari koq muncul, seharusnya tidak muncul?

  13. saya ubah lagi Seperti ini :
    SELECT distinct ;
    feetagih.no_reg, ;
    feetagih.no_kwt, ;
    feetagih.jum_hari, ;
    feetagih.denda, ;
    VAL(STR(000000000)) ;
    as fee ;
    FROM feetagih ;
    WHERE feetagih.tgl_bayar = 4
    REPLACE tempfee.fee WITH ;
    tempfee.denda * 0.1
    ENDIF
    SELECT tempfee
    SKIP
    ENDDO

  14. SELECT distinct ;
    feetagih.no_reg, ;
    feetagih.no_kwt, ;
    feetagih.jum_hari, ;
    feetagih.denda, ;
    VAL(STR(000000000)) ;
    as fee ;
    FROM feetagih ;
    WHERE feetagih.tgl_bayar < ;
    feetagih.tgl_jt ;
    ORDER BY ;
    feetagih.no_reg ;
    INTO CURSOR tempfee READWRITE
    thisform.grid1.RecordSource = 'tempfee'

  15. sy tambah scrip pengisian fee sbb :
    SELECT tempfee
    DO WHILE NOT EOF()
    IF tempfee.jum_hari >= 4
    REPLACE tempfee.fee WITH ;
    tempfee.denda * 0.1
    ENDIF
    SELECT tempfee
    SKIP
    ENDDO

  16. cursor tempfee menjadi seperti ini:
    no_reg ! no_kwt ! jum_hari ! denda ! fee
    004 ! ea005 ! 0 ! 0 ! 0
    jadi bingung Kak Yanto?

  17. padahal saya harapkan cursor tempfee sbb :
    no_reg ! no_kwt ! jum_hari ! denda ! fee
    001 ! ea001 ! 3 ! 0 ! 0
    002 ! ea010 ! 66 ! 66000 ! 6600
    002 ! ea011 ! 35 ! 35000 ! 3500
    002 ! ea012 ! 5 ! 5000 ! 500
    004 ! ea005 ! 0 ! 0 ! 0

Leave a Reply

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

[+] kaskus emoticons nartzco

What is 11 + 8 ?
Please leave these two fields as-is: