|Oracle 8i Data Cartridge Developer's Guide
Release 2 (8.1.6)
Part Number A76937-01
Methods: Using PL/SQL, 2 of 6
A method is procedure or function that is part of the object type definition, and that can operate on the attributes of the type. Such methods are also called member methods, and they take the keyword
MEMBER when you specify them as a component of the object type.
Map methods, which govern comparisons between object types, are discussed above.
The following sections show simple examples of implementing a method, invoking a method, and referencing an attribute in a method. For further explanation and more detailed examples, see the chapter on object types in the PL/SQL User's Guide and Reference.
To implement a method, create the PL/SQL code and specify it within a
For example, consider the following definition of an object type named rational_type:
CREATE TYPE rational_type AS OBJECT ( numerator INTEGER, denominator INTEGER, MAP MEMBER FUNCTION rat_to_real RETURN REAL, MEMBER PROCEDURE normalize, MEMBER FUNCTION plus (x rational_type) RETURN rational_type);
The following definition is shown merely because it defines the function
gcd, which is used in the definition of the
normalize method in the
BODY statement later in this section.
CREATE FUNCTION gcd (x INTEGER, y INTEGER) RETURN INTEGER AS -- Find greatest common divisor of x and y. For example, if -- (8,12) is input, the greatest common divisor is 4. -- This will be used in normalizing (simplifying) fractions. -- (You need not try to understand how this code works, unless -- you are a math wizard. It does.) -- ans INTEGER; BEGIN IF (y <= x) AND (x MOD y = 0) THEN ans := y; ELSIF x < y THEN ans := gcd(y, x); -- Recursive call ELSE ans := gcd(y, x MOD y); -- Recursive call END IF; RETURN ans; END;
The following statement implements the methods (
plus) for the object type
CREATE TYPE BODY rational_type ( MAP MEMBER FUNCTION rat_to_real RETURN REAL IS -- The rat-to-real function converts a rational number to -- a real number. For example, 6/8 = 0.75 BEGIN RETURN numerator/denominator; END; -- The normalize procedure simplifies a fraction. -- For example, 6/8 = 3/4 MEMBER PROCEDURE normalize IS divisor INTEGER := gcd(numerator, denominator); BEGIN numerator := numerator/divisor; denominator := denominator/divisor; END; -- The plus function adds a specified value to the -- current value and returns a normalized result. -- For example, 1/2 + 3/4 = 5/4 -- MEMBER FUNCTION plus(x rational_type) RETURN rational_type IS -- Return sum of SELF + x BEGIN r = rational_type(numerator*x.demonimator + x.numerator*denominator, denominator*x.denominator); -- Example adding 1/2 to 3/4: -- (3*2 + 1*4) / (4*2) -- Now normalize (simplify). Here, 10/8 = 5/4 r.normalize; RETURN r; END; END;
To invoke a method, use the following syntax:
In SQL statements only, you can use the following syntax:
The following PL/SQL example invokes a method named get_emp_sal:
An alternative way to invoke a method is by using the
SELF built-in parameter. Because the implicit first parameter of each method is the name of the object on whose behalf the method is invoked, the following example performs the same action as the line after
BEGIN in the preceding example:
In this example, employee is the name of the object on whose behalf the
get_emp_sal method is invoked.
As shown in the example in "Implementing Methods", member methods can reference the attributes and member methods of the same object type without using a qualifier. A built-in reference is always provided to the object on whose behalf the method is invoked. This reference is called
Consider the following trivial example, in which two statements set the value of variable var1 to 42:
CREATE TYPE a_type AS OBJECT ( var1 INTEGER, MEMBER PROCEDURE set_var1); CREATE TYPE BODY a_type ( MEMBER PROCEDURE set_var1 IS BEGIN var1 := 42; SELF.var1 := 42; END set_var1; );
In this example, var1 := 42 and SELF.var1 := 42 are in effect the same statement. Because var1 is the name of an attribute of the object type a_type and because set_var1 is a member method of this object type, no qualification is required to access var1 in the method code. However, for code readability and maintainability, you can use the keyword
SELF in this context to make the reference to var1 more clear.