Object Oriented Database Oracle PLSQL

SQL>
SQL>
SQL> CREATE OR REPLACE TYPE PriceType AS OBJECT (
  2     discount_rate   NUMBER (10, 4),
  3     price           NUMBER (10, 2),
  4     CONSTRUCTOR FUNCTION PriceType (price NUMBER)
  5        RETURN SELF AS RESULT
  6  )
  7  INSTANTIABLE FINAL;
  8  /
SQL>
SQL> CREATE OR REPLACE TYPE BODY PriceType
  2  AS
  3     CONSTRUCTOR FUNCTION PriceType (price NUMBER)
  4        RETURN SELF AS RESULT
  5     AS
  6     BEGIN
  7        SELF.price := price * .9;
  8        RETURN;
  9     END PriceType;
 10  END;
 11  /
Warning: Type Body created with compilation errors.
SQL> show errors
Errors for TYPE BODY PRICETYPE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
3/25     PLS-00539: subprogram 'PRICETYPE' is declared in an object type
         body and must be defined in the object type specification
3/25     PLW-07203: parameter 'SELF' may benefit from use of the NOCOPY
         compiler hint
5/20     PLS-00538: subprogram or cursor 'DISCOUNT_PRICE' is declared in
         an object type specification and must be defined in the object
         type body
SQL>
SQL>
SQL>
SQL>  SET SERVEROUTPUT ON SIZE 1000000
SQL>  DECLARE
  2      v_price   PriceType := PriceType (75);
  3   BEGIN
  4      DBMS_OUTPUT.put_line (v_price.price);
  5   END;
  6   /
SQL>