Dear All,
saya mau membuat laporan jumlah hari dari range tanggal tertentu,dimana jika
tanggal yang di cek tersebut adalah hari sabtu/minggu/hari libur, maka tidak
akan di hitung.
Misal Tanggal Awal 01-JAN-2010, Tanggal Akhir 05-JAN-2010, maka akan di dapat
selisihnya adalah 2 hari.
Untuk itu saya membuat sebuah function, sehingga kita tinggal mengirimkan
paramater tanggal awal dan tanggal akhir, dimana fungsi nanti akan
mengembalikan tipe data NUMBER, yang merupakan selisih dari tanggal tersebut.
create or replace
function Realisasi(awal DATE,akhir DATE)
return NUMBER
is
nilai NUMBER;
awal2 DATE;
akhir2 DATE;
awaltampung VARCHAR2(20);
akhirtampung VARCHAR2(20);
i NUMBER(5);
hasil NUMBER (5);
dd VARCHAR2(20);
begin
awaltampung := to_char(awal,'dd-mm-yyyy');
akhirtampung := to_char(akhir,'dd-mm-yyyy');
awal2 := to_date(awaltampung,'dd-mm-rrrr');
akhir2 := to_date(akhirtampung,'dd-mm-yyyy');
nilai := round(akhir2-awal2,0);
hasil := 0;
awal2 :=to_date(awal2,'dd-mm-yyyy');
for i in 1 .. nilai
loop
dd := trim(to_char(awal2,'day'));
if dd = 'saturday' or dd = 'sunday'
then
hasil := hasil;
else
hasil := hasil+1;
end if;
awal2 := to_date(awal2,'dd-mm-yyyy')+1;
end loop;
return hasil;
end;
Saya baru bisa mem filter hari sabtu dan minggu, untuk tanggal libur, karena
belum pasti tanggalnya, maka sementara saya berinisiatif, membuat sebuah tabel
baru, dimana isinya adalah tanggal-tanggal libur dalam satu tahun (yang di
inisialisasi). Akan tetapi saya juga masih belum bisa merealisasikan bagaiman
script untuk mengecek nya.
Dan Permasalahan yang pertama, adalah : ketika saya menguji function tersebut :
select realisasi('01-JAN-2010','6-JAN-2010') as hari from dual;
Hasilnya tidak sesuai dengan ketika saya menghitung manual di kalender 2010.
Setelah saya cari tahu, ternyata data yang di olah adalah tahun 0010, bukan
2010. Saya tahunya , ketika saya mencoba melakukan return value berupa varchar,
dari data yang di olah. Kenapa bisa demikan ?? Saya masih belum tahu jawabanya.
Mohon bantuan solusinya ....
[Non-text portions of this message have been removed]