Expert

19-17.

Write a function that returns the date of the nearest day named to the specified date, as in:

FUNCTION nearestday (
   yourdate IN DATE,
   dayname  IN VARCHAR2)
RETURN DATE;

19-18.

Write a function to return the number of business days (defined in this exercise as all days that are not Saturdays and Sundays) between two dates. Here is the header:

FUNCTION bizdays_between (
   start_date IN DATE, end_date IN DATE)
   RETURN INTEGER;

19-19.

Enhance the “business days between” function to also subtract from total the number of holidays stored in the following table:

CREATE TABLE holiday (dt DATE);

19-20.

Write a function that returns the nth named day in the month in which the specified date is located. Here is the header for such a function:

FUNCTION nthday (
   yourdate IN DATE,
   dayname  IN VARCHAR2,
   nthday   IN INTEGER)
RETURN DATE;

and here is the expected behavior:

SQL> EXEC DBMS_OUTPUT.PUT_LINE(nthday(SYSDATE,'monday',1))
February 1, 1999 00:00:00
SQL> EXEC DBMS_OUTPUT.PUT_LINE(nthday(SYSDATE,'monday',2))
February 8, 1999 00:00:00
SQL> EXEC DBMS_OUTPUT.PUT_LINE(nthday(SYSDATE,'monday',3))
February 15, 1999 00:00:00
SQL> EXEC DBMS_OUTPUT.PUT_LINE(nthday(SYSDATE+30,'monday',5))
March 29, 1999 00:00:00

19-21.

I discovered recently (March 1999) that the documented maximum allowable date in PL/SQL had changed from the long-standing December 31, 4712. How did I discover this? A visitor to the PL/SQL Pipeline found that he could work with dates well beyond this “limit.” He wondered what the actual limit ...

Get Oracle PL/SQL Programming: A Developer's Workbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.