SQL>
SQL>
SQL> CREATE OR REPLACE TYPE Student AS OBJECT (
2 ID NUMBER(5),
3 first_name VARCHAR2(20),
4 last_name VARCHAR2(20),
5 major VARCHAR2(30),
6 current_credits NUMBER(3),
7
8 MEMBER FUNCTION FormattedName
9 RETURN VARCHAR2,
10 PRAGMA RESTRICT_REFERENCES(FormattedName, RNDS, WNDS, RNPS, WNPS),
11
12 MEMBER PROCEDURE ChangeMajor(p_NewMajor IN VARCHAR2),
13 PRAGMA RESTRICT_REFERENCES(ChangeMajor, RNDS, WNDS, RNPS, WNPS),
14
15 MEMBER PROCEDURE UpdateCredits(p_CompletedClass IN Class),
16 PRAGMA RESTRICT_REFERENCES(UpdateCredits, RNDS, WNDS, RNPS, WNPS),
17
18 ORDER MEMBER FUNCTION CompareStudent(p_Student IN Student)
19 RETURN NUMBER
20 );
21 /
Type created.
SQL> show errors
No errors.
SQL>
SQL> CREATE OR REPLACE TYPE BODY Student AS
2 MEMBER FUNCTION FormattedName
3 RETURN VARCHAR2 IS
4 BEGIN
5 RETURN first_name || ' ' || last_name;
6 END FormattedName;
7
8 MEMBER PROCEDURE ChangeMajor(p_NewMajor IN VARCHAR2) IS
9 BEGIN
10 major := p_NewMajor;
11 END ChangeMajor;
12
13 MEMBER PROCEDURE UpdateCredits(p_CompletedClass IN Class) IS
14 BEGIN
15 current_credits := current_credits +
16 p_CompletedClass.num_credits;
17 END UpdateCredits;
18
19 ORDER MEMBER FUNCTION CompareStudent(p_Student IN Student)
20 RETURN NUMBER IS
21 BEGIN
22 IF p_Student.last_name = SELF.last_name THEN
23 IF p_Student.first_name < SELF.first_name THEN
24 RETURN 1;
25 ELSIF p_Student.first_name > SELF.first_name THEN
26 RETURN -1;
27 ELSE
28 RETURN 0;
29 END IF;
30 ELSE
31 IF p_Student.last_name < SELF.last_name THEN
32 RETURN 1;
33 ELSE
34 RETURN -1;
35 END IF;
36 END IF;
37 END CompareStudent;
38 END;
39 /
Type body created.
SQL> show errors
No errors.
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> DECLARE
2 v_Student Student; -- This assigns NULL to v_Student by default
3 BEGIN
4 v_Student.ID := 10020;
5 END;
6 /
PL/SQL procedure successfully completed.
SQL>
SQL>