Creating an object type

-- an abstract object
CREATE OR REPLACE TYPE RECTANGLE FORCE AS
    OBJECT (
        LENGTH NUMBER,
        WIDTH NUMBER,
        NOT INSTANTIABLE NOT FINAL MEMBER PROCEDURE DISPLAY,
        -- define a map or order function for comparison
        NOT INSTANTIABLE NOT FINAL MAP MEMBER FUNCTION AREA
                RETURN NUMBER
    ) NOT INSTANTIABLE NOT FINAL;
/
CREATE OR REPLACE TYPE SQUARE UNDER RECTANGLE (
    CONSTRUCTOR FUNCTION SQUARE (LENGTH NUMBER, WIDTH NUMBER)
         RETURN SELF AS RESULT,
    OVERRIDING FINAL MEMBER PROCEDURE DISPLAY,
    OVERRIDING FINAL MAP MEMBER FUNCTION AREA RETURN NUMBER,
    STATIC FUNCTION TEST RETURN VARCHAR2
) FINAL;
/
CREATE OR REPLACE TYPE BODY SQUARE AS
    CONSTRUCTOR FUNCTION SQUARE (LENGTH NUMBER, WIDTH NUMBER)
         RETURN SELF AS RESULT AS
    BEGIN
        SELF.LENGTH := LENGTH;
        SELF.WIDTH := WIDTH;
        RETURN;
    END;
    OVERRIDING FINAL MEMBER PROCEDURE DISPLAY AS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('Square: '
                             || SELF.LENGTH);
    END;
    OVERRIDING FINAL MAP MEMBER FUNCTION AREA
         RETURN NUMBER AS
    BEGIN
        RETURN LENGTH * LENGTH;
    END;
    STATIC FUNCTION TEST RETURN VARCHAR2 AS
    BEGIN
        -- SELF and instance attributes are not available
        -- in static functions
        RETURN 'test';
    END;
END;
/
SELF refers to the current instance of an object. It is an implicit parameter for methods - IN for functions and IN OUT for procedures. It may be omitted when used with MEMBER methods. Objects support only Oracle types - no user defined types are supported in attributes and methods.
Comments