Mega Code Archive

 
Categories / Oracle PLSQL / Object Oriented Database
 

A sample object type with an ORDER member function

SQL> SQL> SQL> SQL> CREATE OR REPLACE TYPE myType AUTHID CURRENT_USER IS OBJECT   2  ( my_number NUMBER   3  , my_name   VARCHAR2(20 CHAR)   4  , CONSTRUCTOR FUNCTION myType RETURN SELF AS RESULT   5  , CONSTRUCTOR FUNCTION myType ( my_number NUMBER, my_name   VARCHAR2 )RETURN SELF AS RESULT   6  , MEMBER PROCEDURE print_instance_variable   7  , ORDER MEMBER FUNCTION equals( my_class myType ) RETURN NUMBER )INSTANTIABLE NOT FINAL;   8  / Type created. SQL> SQL> CREATE OR REPLACE TYPE BODY myType AS   2    CONSTRUCTOR FUNCTION myType   3    RETURN SELF AS RESULT IS   4      my_instance_number NUMBER := 0;   5      my_instance_name   VARCHAR2(20 CHAR) := '';   6   7    BEGIN   8      SELF.my_number := my_instance_number;   9      SELF.my_name := my_instance_name;  10      RETURN;  11  12    END;  13  14    CONSTRUCTOR FUNCTION myType( my_number NUMBER , my_name   VARCHAR2 )  15    RETURN SELF AS RESULT IS  16    BEGIN  17      SELF.my_number := my_number;  18      SELF.my_name := my_name;  19      RETURN;  20    END;  21  22    MEMBER PROCEDURE print_instance_variable IS  23    BEGIN  24      DBMS_OUTPUT.PUT_LINE('Number:'||SELF.my_number);  25      DBMS_OUTPUT.PUT_LINE('Name  :'||SELF.my_name);  26    END;  27    ORDER MEMBER FUNCTION equals( my_class myType )RETURN NUMBER IS  28      false_value NUMBER := 0;  29      true_value  NUMBER := 1;  30    BEGIN  31      IF SELF.my_number = my_class.my_number AND SELF.my_name = my_class.my_name THEN  32        RETURN true_value;  33      ELSE  34        RETURN false_value;  35      END IF;  36    END;  37  END;  38  / Type body created. SQL> SQL> DECLARE   2    obj1 myType := myType;   3    obj2 myType := myType(1,'My Object');   4   5  BEGIN   6    obj1.print_instance_variable;   7   8    obj2.print_instance_variable;   9  10    IF obj1.equals(obj2) = 1 THEN  11      DBMS_OUTPUT.PUT_LINE('equal.');  12    ELSE  13      DBMS_OUTPUT.PUT_LINE('unequal.');  14    END IF;  15  16  END;  17  / Number:0 Name  : Number:1 Name  :My Object unequal. PL/SQL procedure successfully completed.