create or replace PACKAGE BODY do IS /* || Package-level variable. Determines whether output should be displayed. */ show_output_flag BOOLEAN := TRUE; /*------------------------- Private Modules ------------------------ */ PROCEDURE display_line (show_in IN VARCHAR2, line_in IN VARCHAR2) IS BEGIN IF show_output_flag OR UPPER (show_in) = 'SHOW' THEN DBMS_OUTPUT.PUT_LINE (line_in); END IF; END; FUNCTION boolean_string (boolean_in IN BOOLEAN, char_in IN VARCHAR2 := NULL) RETURN VARCHAR2 IS BEGIN IF boolean_in THEN RETURN char_in || ' ' || 'TRUE'; ELSE RETURN char_in || ' ' || 'FALSE'; END IF; END; /*------------------------- Public Modules ------------------------- */ PROCEDURE switch (show_in IN VARCHAR2 := NULL) /* || Sets the value of the show output flag variable. A value of ON || means that output is displayed. Any other value means that || output is ignored. If you call switch without passing an argument, || switch simply toggles the value. */ IS BEGIN IF show_in IS NULL THEN show_output_flag := NOT show_output_flag; ELSE show_output_flag := UPPER (show_in) = 'ON'; END IF; END; /*-------------------------- The pl Procedures ---------------------- -*/ PROCEDURE pl (date_in IN DATE, mask_in IN VARCHAR2 := 'Month DD, YYYY - HH:MI:SS PM', show_in IN VARCHAR2 := NULL) IS BEGIN display_line (show_in, TO_CHAR (date_in, mask_in)); END; PROCEDURE pl (number_in IN NUMBER, show_in IN VARCHAR2 := NULL) IS BEGIN display_line (show_in, number_in); END; PROCEDURE pl (char_in IN VARCHAR2, show_in IN VARCHAR2 := NULL) IS BEGIN display_line (show_in, char_in); END; PROCEDURE pl (char_in IN VARCHAR2, number_in IN NUMBER, show_in IN VARCHAR2 := NULL) IS BEGIN display_line (show_in, char_in || ': ' || TO_CHAR (number_in)); END; PROCEDURE pl (char_in IN VARCHAR2, date_in IN DATE, mask_in IN VARCHAR2 := 'Month DD, YYYY - HH:MI:SS PM', show_in IN VARCHAR2 := NULL) IS BEGIN display_line (show_in, char_in || ': ' || TO_CHAR (date_in, mask_in)); END; PROCEDURE pl (boolean_in IN BOOLEAN, show_in IN VARCHAR2 := NULL) /* || I will even let you look at Boolean variables! */ IS BEGIN display_line (show_in, boolean_string (boolean_in)); END; PROCEDURE pl (char_in IN VARCHAR2, boolean_in IN BOOLEAN, show_in IN VARCHAR2 := NULL) IS BEGIN display_line (show_in, boolean_string (boolean_in, char_in)); END; END do; / show errors