Raporlama, data analizi, monitoring gibi ihtiyaclarimiz icin Oracle ‘in Application Express ‘ini kullaniyorsunuz.
Kullaniciya bolum kodu secebilecegi bir menu verdiginizi ve buna gore sorgunuzun calistigini dusunun.
WHERE bolum_kodu = :pv_bolumkodu
Peki, kullanicimizin ayni anda birden fazla bolum kodu secebilmesini istersek?
Elbette
WHERE bolum_kodu in (:pv_bolumkodu_1, :pv_bolumkodu2, :pv_bolumkodu3)
gibi degiskenlerimizi cogaltabiliriz. Ama ortada onlarca ya da daha fazla secenek varsa her olasilik icin bir degisken tanimlayacak degiliz :)
Ekrana bir Shuttle ya da coklu secime izin veren bir Select List koyarak kullanicidan birden fazla input parameter almak istedigimizi ve bu listenin n secenek icerdigini dusunelim.
Ornek.1 ‘deki gibi, Interaktif raporunuza sag tiklayarak Create Page Item secenegi ile bir Shuttle ekledigimizi varsayalim..
olusturdugumuz Page Item ‘in adini, sorgumuzda kullandigimiz degisken gibi PV_BOLUMKODU olarak verelim.
Ardindan Static ya da Dynamic menu icerigi hazirlamamiz gerekecek.
Bunlari da tamamladiktan sonra yine Ornek.1 ‘de gorulen Create Page Item Button secenegi ile bu kez de sayfamiza bir buton yerlestirelim.
Tum bu temel hazirliklarin ardin, raporumuzu calistirmak icin
butona basildiktan hemen sonra, ama raporun execute edilmesinden de hemen once
calisacak sekilde bir page process yazmamiz gerekecek.
O halde uygulamamiza Ornek.2 ‘de gorulecegi gibi bir Page Process ekleyelim.
Temelde ihtiyacimiz olan sey kullanicinin secimlerini not edip, bu bilgiyi query ‘miz her calistiginda kosul olarak sorgumuza “soyleyebilmek”..
Bunu yapmak icin aklimiza bir cok -pratik ya da kompleks- ozgun cozum gelebilir. Fakat Oracle ‘in bu tur istekleri karsilamak uzere sundugu yapiyi da kullanabiliriz..
Bunun icin Page Process ‘imizin PLSQL blogunda string ‘imizi table ‘a donusturmek uzere bir seyler yazmayi deneyelim..
DECLARE pv_secim apex_application_global.vc_arr2; BEGIN pv_secim := apex_util.string_to_table (:pv_bolumkodu); apex_collection.create_or_truncate_collection ('pv_shuttle'); apex_collection.add_members ('pv_shuttle', pv_secim ); END;
- a
- b
- c
- d
olmak uzere 4 satir secmisseniz, secimleriniz a:b:c:d seklinde siralanacaktir.
Ustte yazdigimiz BEGIN END blogumuzu calistiralim ve PV_BOLUMKODU soruldugunda a:b:c:d girelim.
SELECT *FROM apex_collections;
WHERE bolum_kodu = :pv_bolumkodu
WHERE bolum_kodu IN (SELECT c001 FROM apex_collections WHERE collection_name = 'PV_SHUTTLE' )
diyebiliriz.