Mega Code Archive

 
Categories / Oracle PLSQL / Object Oriented Database
 

Use self reference

SQL> CREATE OR REPLACE TYPE aobj AS object (   2                    state CHAR(2),   3                    amt NUMBER(5),   4   5                    MEMBER FUNCTION mult (times in number) RETURN number,   6                    PRAGMA RESTRICT_REFERENCES(mult, WNDS));   7  / Type created. SQL> SQL> SQL> -- 'self' SQL> SQL> CREATE OR REPLACE TYPE BODY aobj AS   2  MEMBER FUNCTION mult (times in number) RETURN NUMBER   3  IS   4    BEGIN   5      RETURN times * self.amt;   6    END;   7  END;   8  / Type body created. SQL> SQL> SQL> CREATE TABLE aobjtable (arow aobj); Table created. SQL> SQL> SQL> SQL> INSERT INTO aobjtable VALUES (aobj('FL',25)); 1 row created. SQL> INSERT INTO aobjtable VALUES (aobj('AL',35)); 1 row created. SQL> INSERT INTO aobjtable VALUES (aobj('OH',15)); 1 row created. SQL> SQL> -- Use the function we created: use the table alias in our SELECT as well as the qualifier, arow: SQL> SQL> SELECT x.arow.state, x.arow.amt, x.arow.mult(2)   2  FROM aobjtable x; AR   AROW.AMT X.AROW.MULT(2) -- ---------- -------------- FL         25             50 AL         35             70 OH         15             30 SQL> SQL> SQL> DESC aobjtable;  Name                                                                                                  Null?    Type  ----------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------  AROW                                                                                                   AOBJ SQL> SQL> drop table aobjtable; Table dropped. SQL> SQL>