Type declaration:
CREATE OR REPLACE TYPE base_type AS OBJECT
(
base_id INTEGER,
base_attr VARCHAR2(400),
null_attr INTEGER, -- Present only to demonstrate non-default constructors
CONSTRUCTOR FUNCTION base_type
(
i_base_id INTEGER,
i_base_attr VARCHAR2
) RETURN SELF AS RESULT,
MEMBER FUNCTION get_base_id RETURN INTEGER,
MEMBER FUNCTION get_base_attr RETURN VARCHAR2,
MEMBER PROCEDURE set_base_id(i_base_id INTEGER),
MEMBER PROCEDURE set_base_attr(i_base_attr VARCHAR2),
MEMBER FUNCTION to_string RETURN VARCHAR2
) INSTANTIABLE NOT FINAL
Type body:
CREATE OR REPLACE TYPE BODY base_type AS
CONSTRUCTOR FUNCTION base_type
(
i_base_id INTEGER,
i_base_attr VARCHAR2
) RETURN SELF AS RESULT
IS
BEGIN
self.base_id := i_base_id;
self.base_attr := i_base_attr;
RETURN;
END base_type;
MEMBER FUNCTION get_base_id RETURN INTEGER IS
BEGIN
RETURN self.base_id;
END get_base_id;
MEMBER FUNCTION get_base_attr RETURN VARCHAR2 IS
BEGIN
RETURN self.base_attr;
END get_base_attr;
MEMBER PROCEDURE set_base_id(i_base_id INTEGER) IS
BEGIN
self.base_id := i_base_id;
END set_base_id;
MEMBER PROCEDURE set_base_attr(i_base_attr VARCHAR2) IS
BEGIN
self.base_attr := i_base_attr;
END set_base_attr;
MEMBER FUNCTION to_string RETURN VARCHAR2 IS
BEGIN
RETURN 'BASE_ID ['||self.base_id||']; BASE_ATTR ['||self.base_attr||']';
END to_string;
END;