CREATE OR REPLACE PACKAGE stateful
AUTHID DEFINER
IS
session_value NUMBER;
PROCEDURE set_session_value (value_in IN NUMBER);
END;
CREATE OR REPLACE PACKAGE BODY stateful
IS
PROCEDURE set_session_value (value_in IN NUMBER)
IS
BEGIN
session_value := value_in;
END;
BEGIN
session_value := 100;
END;
BEGIN
DBMS_OUTPUT.put_line ('Default ' || stateful.session_value);
stateful.set_session_value (1000);
DBMS_OUTPUT.put_line ('Set ' || stateful.session_value);
END;
BEGIN
DBMS_SESSION.reset_package;
END;
BEGIN
/* DBMS_OUTPUT has been reinitialized too! */
DBMS_OUTPUT.enable;
END;
BEGIN
DBMS_OUTPUT.put_line ('Default ' || stateful.session_value);
END;
CREATE OR REPLACE PACKAGE stateful
AUTHID DEFINER
IS
session_value NUMBER;
PROCEDURE init_package;
PROCEDURE set_session_value (value_in IN NUMBER);
END;
CREATE OR REPLACE PACKAGE BODY stateful
IS
PROCEDURE init_package
IS
BEGIN
session_value := 100;
END;
PROCEDURE set_session_value (value_in IN NUMBER)
IS
BEGIN
session_value := value_in;
END;
BEGIN
init_package;
END;
BEGIN
DBMS_OUTPUT.put_line ('Default ' || stateful.session_value);
stateful.set_session_value (1000);
DBMS_OUTPUT.put_line ('Set ' || stateful.session_value);
RAISE PROGRAM_ERROR;
EXCEPTION
WHEN OTHERS
THEN
stateful.init_package;
END;
BEGIN
DBMS_OUTPUT.put_line ('Default ' || stateful.session_value);
END;