Manfaatkan Selectable Procedure untuk query lebih dari satu field kata kunci

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.

3 Comments to Manfaatkan Selectable Procedure untuk query lebih dari satu field kata kunci

  1. mboloz says:

    😀 sangat bermanfaat, terimakasih pak

Leave a Reply

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