Menentukan Tanggal Paskah untuk Setiap Tahun di Oracle PLSQL
MasalahAnda ingin menentukan tanggal Paskah secara dinamis untuk tahun tertentu.SolutionOracle tidak menyediakan satu fungsi elegan untuk melakukan penghitungan Paskah untuk Anda. Tetapi Oracle memang memiliki fungsi aritmatika tanggal yang kuat yang dapat kita gunakan untuk membuat kalkulator Paskah kita sendiri. Ini menimbulkan pertanyaan, bagaimana kita menentukan tanggal Paskah? Untuk Paskah di bawah kalender Gregorian, Minggu Paskah adalah hari Minggu setelah bulan purnama pertama setelah Prapaskah. Algoritme kontemporer menerjemahkan ini ke hari Minggu pertama setelah bulan purnama pertama pada atau setelah 21 Maret.Fungsi berikutnya mengembalikan tanggal Minggu Paskah untuk tahun tertentu.buat atau ganti fungsi easter_sunday(nomor_tahun yang diberikan) tanggal kembaliasgolden_metonic number;century number;leap_year_fix number;nomor sinkron_lunar;nomor tanggal_minggu;nomor epact;nomor hari_of_bulan;nomor paskah_offset;begingolden_metonic :=mod(given_year,19) + 1;abad :=(diberikan_tahun / 100) + 1;leap_year_fix :=(3 * abad / 4) - 12;lunar_sync :=((8 * abad + 5)/25) - 5;sunday_date :=(5 * diberikan_year / 4) - leap_year_fix - 3;epact :=mod((11 * golden_metonic + 20 + lunar_sync - leap_year_fix) ,30);if((epac =25 dan golden_metonic <11) or (epac =24)) thenepact :=epact + 1;end if;day_of_month :=44 - eact;if(day_of_month <21) thenday_of_month :=day_of_month + 30;end if;easter_offset :=(day_of_month + 7 - mod((sunday_date + day_of_month),7)) - 1;return to_date('01-MAR-' || to_char(given_year),'DD -MON-YYYY') + easter_offset;end;/Kita bisa saja mengkodekan ini dalam SQL murni sebagai satu set pernyataan IF dan CASE bersarang yang agak besar, tetapi fungsi ini lebih mudah dibaca dan lebih mudah digunakan dalam praktik. Kita sekarang dapat menemukan Paskah untuk tahun tertentu, seperti 2000 yang ditunjukkan dalam pernyataan SQL berikutnya. pilih easter_sunday(2000)from dual;EASTER_SUNDAY-------------23-APR-00Kita juga dapat menentukan secara dinamis Minggu Paskah untuk tahun berjalan tanpa perlu menyebutkan tahun secara eksplisit. Pernyataan SQL berikutnya mengilustrasikan ini dalam action.select easter_sunday(extract(year from (sysdate)))from dual;EASTER_SUNDAY-------------12-APR-09