|
1227,玩不下去了。歇菜
create or replace package easter is
PROCEDURE showAllEasterDay;
PROCEDURE showMaxOccurenceEasterDay;
PROCEDURE showLeapEasterDay;
PROCEDURE showFoolEasterDay;
end;
/
create or replace package body easter is
R DM_ITEMS := DM_ITEMS();
D INT;
B INT := 0;
C INT := 0;
E INT;
PROCEDURE O(L VARCHAR := ' ') IS
S CHAR(6);
BEGIN
IF L = ' ' THEN
FOR I IN 301..430 LOOP
E := R(I);
IF D < 99 THEN S := 0 || REPLACE(RPAD(I/100,4, 0),'.','-') || '/';
END IF;
IF E = D THEN
R(5) := R(5) || S;
END IF;
IF I < 400 AND E >= B THEN
B := E;
R(3) := R(3) || S;
END IF;
IF I > 400 AND E >= C THEN
C := E;
R(4) := R(4) || S;
END IF;
IF I || E < 332 AND I > 321 OR I || E < 426 AND I > 400 THEN
R(2) := R(2) || S;
END IF;
END LOOP;
END IF;
DBMS_OUTPUT.PUT_LINE(L);
END;
PROCEDURE showAllEasterDay IS
BEGIN
O('YEAR DAY');
FOR X IN 2011..2099 LOOP
O(X || R(X));
END LOOP;
END;
PROCEDURE showFoolEasterDay IS
BEGIN
O('YEAR TOTAL
' || REPLACE(R(802),'#',LENGTH(R(802))/7));
END;
PROCEDURE showLeapEasterDay IS
BEGIN
O('ABSENT_START ABSENT_END
' || SUBSTR(R(2),1,5) || ' ' || SUBSTR(R(2),-6,5));
END;
PROCEDURE showMaxOccurenceEasterDay IS
BEGIN
O('MAXOCC MO_CNT MAXOCC_3 MO3_CNT MAXOCC_4 MO4_CNT
' || REPLACE(R(5) || ' ' || D || ' ' || R(3) || ' ' || B || ' ' || R(4) || ' ' || C, '/ '));
END;
BEGIN
FOR I IN 2011..2099 LOOP
R.EXTEND(I);
D := (234 - I MOD 19 * 11) MOD 30 ;
D := D + INSTR(27-D,'-');
R(I) := TO_CHAR(DATE'1-3-28' + D - (I + TRUNC(I / 4) + D + 1) MOD 7,' MM-DD');
D := REPLACE(R(I),'-');
R(D*2) := R(D*2) || I || ' #
';
R(D) := 0 || R(D) + 1;
END LOOP;
O;
D := GREATEST(B, C);
O;
END;
/
set serveroutput on
exec easter.showFoolEasterDay;
exec easter.showLeapEasterDay;
exec easter.showMaxOccurenceEasterDay;
exec easter.showAllEasterDay;
SELECT SUM(length(REPLACE(REPLACE(REPLACE(text, ' '), chr(9)), chr(10)))) bytes FROM user_source WHERE NAME = 'EASTER';
/
[ 本帖最后由 DragonBill 于 2011-4-29 17:19 编辑 ] |
|