Method Example I
SQL> CREATE OR REPLACE TYPE book_t AS OBJECT (
2 title VARCHAR(64),
3 author VARCHAR(32),
4 price NUMBER(5, 2),
5 stock_qty NUMBER(4),
6 MEMBER FUNCTION get_discount RETURN NUMBER );
Type created.
SQL> CREATE OR REPLACE TYPE BODY book_t AS
2 MEMBER FUNCTION get_discount RETURN NUMBER IS
3 clearance number := 40;
4 nominal number := 10;
5 BEGIN
6 IF stock_qty < 100 THEN
7 RETURN round( ( price * nominal / 100 ), 2 );
8 ELSE
9 RETURN round( ( price * clearance / 100 ), 2 );
10 END IF;
11 END;
12 END;
13 /
Type body created.
SQL> CREATE TABLE books OF book_t;
Table created.
SQL> INSERT INTO books VALUES(
2 book_t( 'Oracle 12c: The Complete Reference',
3 'Kevin Loney', 44.99, 345 ) );
1 row created.
SQL> SELECT b.price, b.price - b.get_discount( )
2 FROM books b WHERE author = 'Kevin Loney';
PRICE B.PRICE-B.GET_DISCOUNT( )
---------- -------------------------
44.99 26.99
SQL> VARIABLE x NUMBER;
SQL> BEGIN
2 SELECT b.price - b.get_discount( ) INTO :x
3 FROM books b WHERE author = 'Kevin Loney';
4 END;
5 /
PL/SQL procedure successfully completed.
SQL> PRINT :x;
X
----------
26.99
|
ROUND(n [, m])
returns
n
rounded to
m
places right of the decimal point; e.g.,
ROUND(15.193, 1) = 15.2
.