Pada sebuah aplikasi penjualan (POS) biasanya untuk mencari sebuah barang dilakukan dengan melakukan pencarian (query) yang tidak hanya berdasar pada satu field saja.
Metode pencarian yang diinginkan ..
Pertama dicari dulu berdasarkan Barcode, kalo tidak ada kemudian dicari berdasarkan Kode Barang, kalo tidak ada juga maka kata yg dimasukkan dianggap merupakan bagian dari Nama Barang.
Contoh ..
Nama Barang : AGAR2 SWALLOW PUTIH
Kode Barang : 01.0078
Barcode : 8991689168001
Dalam melakukan pencarian diharapkan dengan hanya satu kali proses dengan memasukkan salah satu kriteria diatas.
Kita dapat memasukkan kata dengan mengabaikan kata itu Nama, Kode, atau Barcode.
Sebenarnya kita bisa juga menggunakan query SQL biasa seperti dibawah ini
SELECT ID,KODEBRG,BARKODE,"Nama Barang", SATUAN_K, SATUAN_B,JML_SAT_B,HRG_JUAL FROM BARANG WHERE BARKODE=:CARI OR KODEBRG=:CARI OR "Nama Barang" CONTAINING :CARI
dan hasilnya seperti gambar berikut
Namun untuk data yg besar query seperti diatas akan memakan waktu lama karena walaupun dia sudah menemukan Kode Barang dia masih akan mencari Barcode dan Nama Barang.
Dan akan jadi masalah juga bila didalam Nama Barang mengandung angka yang ada di Bardcode atau Kode Barang.
Sebagai solusinya kita akan membuat Selectable Procedure (yaitu procedure yang dapat diselect sebagaimana table biasa), dimana pencariannya menggunakan prioritas seperti yang disebutkan diatas, jika kata yang dicari sama dengan Barcode maka dia tidak akan mencari Kode Barang atau Nama Barang lagi, sehingga tidak membuang waktu.
SELECT * FROM SP_CARI('8991689168001');
SELECT * FROM SP_CARI('01.0078');
SELECT * FROM SP_CARI('PUTIH');
OK, langsung saya ini dia procedurenya …
CREATE PROCEDURE SP_CARI ( KATA VARCHAR(30) CHARACTER SET NONE) RETURNS ( ID INTEGER, KODEBRG VARCHAR(7) CHARACTER SET NONE, BARKODE VARCHAR(20) CHARACTER SET NONE, "Nama Barang" VARCHAR(20) CHARACTER SET NONE, SATUAN_K VARCHAR(10) CHARACTER SET NONE, SATUAN_B VARCHAR(10) CHARACTER SET NONE, JML_SAT_B NUMERIC(18,2), HRG_JUAL NUMERIC(18,2) ) AS BEGIN SELECT ID, KODEBRG, BARKODE, "Nama Barang", SATUAN_K, SATUAN_B, JML_SAT_B, HRG_JUAL FROM BARANG WHERE BARKODE=:KATA INTO :ID, :KODEBRG, :BARKODE, :"Nama Barang", :SATUAN_K, :SATUAN_B, :JML_SAT_B, :HRG_JUAL; IF (ID IS NULL) THEN SELECT ID, KODEBRG, BARKODE, "Nama Barang", SATUAN_K, SATUAN_B, JML_SAT_B, HRG_JUAL FROM BARANG WHERE KODEBRG=:KATA INTO :ID, :KODEBRG, :BARKODE, :"Nama Barang", :SATUAN_K, :SATUAN_B, :JML_SAT_B, :HRG_JUAL; IF (ID IS NULL) THEN BEGIN FOR SELECT ID, KODEBRG, BARKODE, "Nama Barang", SATUAN_K, SATUAN_B, JML_SAT_B, HRG_JUAL FROM BARANG WHERE "Nama Barang" CONTAINING :KATA ROWS 25 INTO :ID, :KODEBRG, :BARKODE, :"Nama Barang", :SATUAN_K, :SATUAN_B, :JML_SAT_B, :HRG_JUAL DO SUSPEND; END ELSE SUSPEND; END
Semoga bermanfaat.