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>
Related examples in the same category