Mega Code Archive

 
Categories / Oracle PLSQL / Object Oriented Database
 

This script demonstrates column objects

SQL> SQL> SET SERVEROUTPUT ON SIZE 1000000 SQL> SQL> SQL> CREATE OR REPLACE TYPE BookType AS OBJECT (   2     rebate   NUMBER (10, 4),   3     price           NUMBER (10, 2),   4     MEMBER FUNCTION discount_price   5        RETURN NUMBER   6  )   7  INSTANTIABLE FINAL;   8  / Type created. SQL> SQL> CREATE OR REPLACE TYPE BODY BookType   2  AS   3     MEMBER FUNCTION discount_price   4        RETURN NUMBER   5     IS   6     BEGIN   7        RETURN (SELF.price * (1 - SELF.rebate));   8     END discount_price;   9  END;  10  / Type body created. SQL> SQL> CREATE TABLE bookTable (   2      item_id NUMBER(10) PRIMARY KEY,   3      num_in_stock NUMBER(10),   4      reorder_status VARCHAR2(20 CHAR),   5      price BookType   6  ); Table created. SQL> SQL> INSERT INTO bookTable VALUES (1, 10, 'IN STOCK', BookType (.1, 75)); 1 row created. SQL> SQL> commit; Commit complete. SQL> SQL> DECLARE   2     v_price   BookType;   3  BEGIN   4     SELECT price INTO v_price FROM bookTable WHERE item_id = 1;   5   6     DBMS_OUTPUT.put_line ('Price BEFORE update: ' || v_price.discount_price);   7     v_price.rebate := .2;   8   9     UPDATE bookTable SET price = v_price;  10  11     DBMS_OUTPUT.put_line ('Price AFTER update: ' || v_price.discount_price);  12     ROLLBACK;  13  END;  14  / Price BEFORE update: 67.5 Price AFTER update: 60 PL/SQL procedure successfully completed. SQL> SQL> SELECT i.price.price, i.price.rebate FROM bookTable i; PRICE.PRICE PRICE.REBATE ----------- ------------          75           .1 1 row selected. SQL> SQL> SELECT i.price.discount_price() FROM bookTable i; I.PRICE.DISCOUNT_PRICE() ------------------------                     67.5 1 row selected. SQL> SQL> drop table bookTable; Table dropped. SQL>