Column 'REF' an object type
SQL> SQL> CREATE OR REPLACE TYPE address AS OBJECT ( 2 street_1 VARCHAR2(40), 3 street_2 VARCHAR2(40), 4 city VARCHAR2(40), 5 state_abbr VARCHAR2(2), 6 zip_code VARCHAR2(5), 7 phone_number VARCHAR2(10), 8 MEMBER PROCEDURE ChangeAddress ( 9 st_1 IN VARCHAR2, st_2 IN VARCHAR2, cty IN VARCHAR2, 10 state IN VARCHAR2, zip IN VARCHAR2), 11 MEMBER FUNCTION getStreet (line_no IN number) RETURN VARCHAR2, 12 MEMBER FUNCTION getCity RETURN VARCHAR2, 13 MEMBER FUNCTION getStateAbbr RETURN VARCHAR2, 14 MEMBER FUNCTION getPostalCode RETURN VARCHAR2, 15 MEMBER FUNCTION getPhone RETURN VARCHAR2, 16 MEMBER PROCEDURE setPhone (newPhone IN VARCHAR2) 17 ); 18 / Type created. SQL> SQL> SQL> CREATE OR REPLACE TYPE BODY address AS 2 MEMBER PROCEDURE ChangeAddress ( 3 st_1 IN VARCHAR2, st_2 IN VARCHAR2, cty IN VARCHAR2, 4 state IN VARCHAR2, zip IN VARCHAR2) IS 5 BEGIN 6 IF (st_1 IS NULL) OR (cty IS NULL) OR 7 (state IS NULL) OR (zip IS NULL) 8 OR (upper(state) NOT IN ('AK','AL','AR','AZ','CA','CO', 9 'CT','DC','DE','FL','GA','HI', 10 'IA','ID','IL','IN','KS','KY', 11 'LA','MA','MD','ME','MI','MN', 12 'MO','MS','MT','NC','ND','NE', 13 'NH','NJ','NM','NV','NY','OH', 14 'OK','OR','PA','RI','SC','SD', 15 'TN','TX','UT','VA','VT','WA', 16 'WI','WV','WY')) 17 OR (zip <> ltrim(to_char(to_number(zip),'09999'))) THEN 18 RAISE_application_error(-20001,'The new Address is invalid.'); 19 ELSE 20 street_1 := st_1; 21 street_2 := st_2; 22 city := cty; 23 state_abbr := upper(state); 24 zip_code := zip; 25 END IF; 26 END; 27 28 MEMBER FUNCTION getStreet (line_no IN number) 29 RETURN VARCHAR2 IS 30 BEGIN 31 IF line_no = 1 THEN 32 RETURN street_1; 33 ELSIF line_no = 2 THEN 34 RETURN street_2; 35 ELSE 36 RETURN ' '; 37 END IF; 38 END; 39 40 MEMBER FUNCTION getCity RETURN VARCHAR2 IS 41 BEGIN 42 RETURN city; 43 END; 44 45 MEMBER FUNCTION getStateAbbr RETURN VARCHAR2 IS 46 BEGIN 47 RETURN state_abbr; 48 END; 49 50 MEMBER FUNCTION getPostalCode RETURN VARCHAR2 IS 51 BEGIN 52 RETURN zip_code; 53 END; 54 55 MEMBER FUNCTION getPhone RETURN VARCHAR2 IS 56 BEGIN 57 RETURN phone_number; 58 END; 59 60 MEMBER PROCEDURE setPhone (newPhone IN VARCHAR2) IS 61 BEGIN 62 phone_number := newPhone; 63 END; 64 END; 65 / Type body created. SQL> set echo on SQL> SQL> SQL> CREATE OR REPLACE TYPE appartment AS OBJECT ( 2 BldgName VARCHAR2(40), 3 BldgAddress address, 4 BldgMgr INTEGER, 5 MEMBER PROCEDURE ChangeMgr (NewMgr IN INTEGER), 6 ORDER MEMBER FUNCTION Compare (OtherAppartment IN appartment) 7 RETURN INTEGER 8 ); 9 / Type created. SQL> SQL> CREATE OR REPLACE TYPE BODY appartment AS 2 MEMBER PROCEDURE ChangeMgr(NewMgr IN INTEGER) IS 3 BEGIN 4 BldgMgr := NewMgr; 5 END; 6 7 ORDER MEMBER FUNCTION Compare (OtherAppartment IN appartment) 8 RETURN INTEGER IS 9 BldgName1 VARCHAR2(40); 10 BldgName2 VARCHAR2(40); 11 BEGIN 12 BldgName1 := upper(ltrim(rtrim(BldgName))); 13 BldgName2 := upper(ltrim(rtrim(OtherAppartment.BldgName))); 14 15 IF BldgName1 = BldgName2 THEN 16 RETURN 0; 17 ELSIF BldgName1 < BldgName2 THEN 18 RETURN -1; 19 ELSE 20 RETURN 1; 21 END IF; 22 END; 23 END; 24 / Type body created. SQL> CREATE TABLE employee( 2 emp_id INTEGER, 3 emp_name VARCHAR2(32), 4 supervised_by INTEGER, 5 pay_rate NUMBER(9,2), 6 pay_type CHAR, 7 emp_bldg REF appartment); Table created. SQL> SQL> drop table employee; Table dropped. SQL> SQL> drop type appartment; Type dropped. SQL> --
1. | Insert with ref | ||
2. | Create table with ref | ||
3. | Delete records | ||
4. | List to list using object references | ||
5. | MAKE_REF and user view |