03 - Object-Oriented Oracle
03 - Object-Oriented Oracle
Chapter I
Object-Relational
Approaches
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
2 Rahayu, Taniar and Pardede
The static aspects of OOCM involve the creation of the objects and classes that
also includes decisions regarding their attributes. In addition, the static aspects
of OOCM are also concerned with the relationship between objects, that is,
inheritance, association, and aggregation.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 3
get_age ( ) methods
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
4 Rahayu, Taniar and Pardede
name = ‘Adam’
work = Department
set_details ( )
put_details ( )
Inheritance Relationships
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 5
Person superclass
name
address
is a
Student subclass
student_ID
major
Consider Figure 1.3 as an example. Suppose there are two classes: Person and
Student. In this case, every student must be a person, so Student class inherits
from Person class. All features that apply to a person are applicable to a
student, and every student is a person. A student will also have a name and an
address from Person class. Moreover, a student can have additional features.
Therefore, the inheritance mechanism can be viewed as an extension of a
superclass.
On the other hand, rather than being considered as an extension, inheritance
can be viewed as a restriction on the superclass by hiding previously exported
features of the superclass. Figure 1.4 shows an example of using inheritance as
a restriction. Beside features such as name, address, and so forth, Employee
class has an attribute salary, whereas Volunteer class, which is a special case
of employee, does not receive any salary.
is a
Vo lunteer subclass
no_salary
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
6 Rahayu, Taniar and Pardede
Association Relationships
One-to-One Association
In this type, only one object can be connected with another object of the other
type for the particular association link, and vice versa.
For example, in Figure 1.5, Staff class and Office class are connected through
a work_in association link. The link is one-to-one type because only one staff
can work in one office, and one office can have only one staff working in it.
One-to-Many Association
In this type, the first object can be connected only with one of the second
object, but the second object can connect with many of the first object.
1 work_in 1
Staff Office
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 7
1… enrolled_in 1
Student Department
1… takes 1…
Student Subject
For example, in Figure 1.6, Student class and Department class are connected
through an enrolled_in association link. The link is one-to-many type because
one student can enroll only in one department, but one department can have
many students enrolled in it.
Many-to-Many Association
In this type, one object can be connected with many objects of the other type
for the particular association link, and vice versa.
For example, in Figure 1.7, Student class and Subject class are connected
through a takes association link. The link is a many-to-many type because one
student can take many subjects, and one subject can be taken by many
students.
Aggregation Hierarchies
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
8 Rahayu, Taniar and Pardede
PC
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 9
When the existence of the part object is fully dependent on the whole object,
then the aggregation relationship is of an existence-dependent type. In this type
of aggregation, whenever the whole object is removed, then all its associated
part objects will also be removed. Thus, no part object can exist without an
associated whole object. This is the most common type of aggregation, where
the whole object is more like a container object. When the existence of a part
object is independent of any whole object, we will have an existence-
independent aggregation.
Existence-dependent and existence-independent compositions are two aggre-
gation types in which the dependencies between the whole object and its part
objects are significant.
Figure 1.9 shows an example of an existence-dependent composition. In the
example, a Course Outline object is an encapsulation of several part objects,
that is, Course Objectives, Course Contents, and Course Schedule. When a
whole object is accessed, its part objects can be identified without the necessity
to trace every link from the Course Outline object. In an existence-dependent
type of composition, the deletion of a course outline will cause the deletion of
that particular course outline and all of its elements.
In an existence-independent type of composition, the existence of the part is
independent. For example, in Figure 1.10, if for some reason Travel Docu-
ments is removed, the ticket, itinerary, and passport still exist.
1… 1… 1…
Course Objectives Course Content Course Schedule
1… 1… 1…
Tickets Itinerary Passport
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
10 Rahayu, Taniar and Pardede
1 1
CPU Hard Disk
1…
1… 1…
Binary File Text File
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 11
Homogeneous Composition
Hard Disk
1
1…
Hard-Disk Controller
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
12 Rahayu, Taniar and Pardede
Attributes
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 13
Methods as a routine can be divided into two main parts: the generic method
and user-defined method.
Generic Methods
Generic methods are used to access attributes of an object. The concept behind
the need for generic methods is encapsulation, in which attributes associated
with an object can be accessed directly only by the methods of the object itself.
In object orientation, attributes refer to simple or primitive types (such as
integer, string, etc.), user-defined objects (such as Person, Student, etc.), or
collection types (such as list, array, set, and bag). Generic methods should
provide ways for accessing the different types of attributes.
Generic methods may have the following operations: retrieval, update,
delete, or insert. The retrieval generic methods are methods to retrieve the
attributes’ values. They are actually read-only methods and are often known as
queries. The update generic methods are used to update the values of the
specified attributes. The delete generic methods are used to delete the specified
attributes’ values. Since the update and the delete generic methods manipulate
the values of the specified attributes, they are often associated with the data-
manipulation language (DML). The insert generic methods insert new values to
the specified attributes. This is similar to the concept of object creation in an
object-oriented environment.
All of the above operations (i.e., retrieve, update, delete, and insert) can be
applied to inheritance, association, and aggregation hierarchies. Generic meth-
ods on inheritance hierarchies are methods that access attributes in inheritance
hierarchies. Normally, the method is declared in a subclass and accesses the
value of the superclasses’ attributes, and it may also access local attributes
(attributes of the subclass) as well.
Generic methods on association structures are methods that access attributes
of classes along an association structure. If two classes are associated through
an association relationship, methods declared in one class may access at-
tributes of the other class.
Generic methods on aggregation hierarchies are methods that access attributes
of other specified classes in an aggregation hierarchy. If the method is declared
in a whole class, the methods may access attributes of its part classes. The
opposite is applied if the method is declared in a part class, where it may access
attributes of the whole class as well as its own. Figure 1.16 illustrates the
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
14 Rahayu, Taniar and Pardede
Inheritance
Association
Aggregation
User-Defined Methods
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 15
New Era of
Object-Relational Approaches
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
16 Rahayu, Taniar and Pardede
Despite the differences between the object-oriented and the relational para-
digm, in reality, most of object-based development systems are still using the
RDBMS engine as their persistence mechanism. Therefore, a transformation
from object-oriented models into relational structures and operations is crucial.
Much work has been done in this area, where each structure in the OOCM is
transformed into implementation in pure RDBMS (Rahayu, Chang, Dillon, &
Taniar, 2000, 2001). This method is especially useful when the RDBMS
chosen for the implementation is a pure RDB that does not support object-
oriented extensions (SQL 92 standard).
!"#$
34,0$$ $
52267-1.7894$ )"#$ $
%&'(!$
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 17
()*+ !"#
,--./012/34) 567*028
5+/*42*9
:*12;+*)
$%&'!
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
18 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 19
**+,-.) 5+,-.)
!"#$%&#'(")
/%0") /%0")
122&34#'3($%) 122&34#'3($%)
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
20 Rahayu, Taniar and Pardede
the theoretical mapping from the originating schema into the target schema is
essential. Ideally, this mapping methodology should cover both the structural
component as well as the dynamic component of the database systems.
The relational data model has a sound theoretical foundation, is based on the
mathematical theory of relations and first-order logic, and gives the users a
simple view of data in the form of two-dimensional tables. Many DBMSs use
this relational model. Even nonrelational systems are often described as having
supporting relational features for commercial purposes. The model’s objec-
tives were specified as follows.
The first two objectives have been achieved by the relational model, mainly
because of the simplicity of the relational views presenting the data in two-
dimensional tables and the application of the normalization theory to database
design.
The third objective has been achieved by the use of relational algebra, which
manipulates tables in the same way that arithmetical operators manipulate
integers, and by nonprocedural languages based on logical queries specifying
the data to be obtained without having to explain how to obtain them.
The last objective is the essence of current developments concerning extended
relational and object-relational models.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 21
Case Study
The Australian Education Union (AEU) keeps the records of its properties and
activities in a database using an object-oriented concept. Property can be
divided into two main categories: building and vehicle. Beside these two, there
are also other minor properties that are not categorized into building and
vehicle. Each building has several rooms and each room has computers in it.
Some of the rooms also have overhead projectors (OHPs).
The union employees’ records are kept in a separate class. Employees can be
divided into two types: office staff and organizers. Management is not included
in these two categories, although their data is also kept in the employee class.
While office staff work only internally in the union, the organizers have to
represent teachers in the area to which they have been assigned. One organizer
can represent many teachers, but one teacher can have only one organizer as
her or his representation. For this purpose, each organizer has been given one
vehicle, and that vehicle may be used only by that particular organizer. Each
organizer will be assigned only one area, which can be divided into several
suburbs. The area and suburb data are also kept in separate classes.
The union also keeps records for teachers who are union members. All of these
teachers have to work in government schools. Although it is not common, a
teacher can work in more than one school. The type of school that can liaise
with AEU has to be categorized into one of the three distinct types: primary
school, secondary school, and technical college (TechC).
We will draw an object-oriented model of the AEU database and determine the
type where necessary. We will identify the objects and the relationships as
follows.
• Identify Objects
To start with, we know that there will be a union object to store the data
about the AEU organization. It also has a property object that can be
divided into building and vehicle objects. Furthermore, there is a room
object that is composed of PC and OHP objects.
Next, we will need an employee object for AEU’s employee records.
Their types are also objects: Office Staff and Organizer. For working area
and suburb, we need two new objects as well.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
22 Rahayu, Taniar and Pardede
1… 1 1 1…
works has
Employee Union Property
1 uses 1
Office Staff Organizer Vehicle Building
1
1 1
represents 1…
assigned in
Rooms
1 1…
1
Area Teacher
1 1…
1… 1…
1…
PC OHP
Suburb
teaches in
1…
School
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 23
After identifying the objects and their relationships, we can draw down the
object-oriented model for the AEU case study as it is shown in Figure 1.21.
Summary
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
24 Rahayu, Taniar and Pardede
References
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 25
Chapter Problems
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
26 Rahayu, Taniar and Pardede
Assuming that there are five classes, that is, References, Book,
Article_Journal, Conference_Paper, and PhD_Thesis, develop the class
hierarchy for the above description, and draw the corresponding class
diagram. You also need to identify the relationship between references
and another class, Postgraduate. Assume some attributes where neces-
sary.
6. AllBooks Library wants to extend its database by using the object-
oriented concept. For this purpose, in the database the authors are
categorized according to their backgrounds: industry based or academic.
If the author is an academic, the database needs to be further categorized
into research or teaching staff. They found that many academics are also
involved in industry and vice versa. However, it is found that an academic
may simultaneously be involved in both research and teaching. To simplify
the database, the developer decides that an academic can only be
recorded as a research staff or a teaching staff depending on his or her
primary role.
In the database, the books that the authors have written or edited are kept
in a different object named Course_Manual. For each datum in
Course_Manual, there are descriptions of each chapter that are kept as
another object. Draw the diagram for the object-oriented model de-
scribed above.
7. A new fast-food company, Hungry Burger, has just opened its first
restaurant in the country. One of its main menu items is called Huge Meal.
The Huge Meal package includes a big special hamburger, a drink, and a
generous-size bag of fries. The construction of the hamburger at Hungry
Burger has a special order that has to be followed. On the lower half of
the bun, kitchen staff will put a slice of meat patty, followed by two pieces
of lettuce, a slice of cheese, and a slice of tomato. The fries are made of
potatoes fried in grease. The hamburger and the fries may be sold
separately or with another package on the menu.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 27
Draw the aggregation diagram for Hungry Burger’s Huge Meal. Explain
the dependency, order, and also the exclusiveness where necessary.
8. The Fast Run Bicycle Company is a major bicycle retailer. Unlike other
bicycle companies, it assembles its own bicycles to meet the customers’
requirements. The three main components are seats, frames, and wheels.
These three main components are inherited from the part class and these
parts are bought from several manufacturers. There are three categories
of bicycles assembled by Fast Run: racing, mountain, and road bicycles.
From the description given, draw a diagram for Fast Run that shows the
aggregation, inheritance, and association relationships.
Chapter Solutions
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
28 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Relational Approaches 29
writes
Author Course_Manual
1
homogeneous
Industry_Based Academic
1…
Chapter
Research_Staff Teaching_Staff
1 1 1
Hamburger Drink Fries
1 1
1 1 1… 1 1 1… 1…
Bun Meat Lettuce Cheese Tomato Potato Grease
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
30 Rahayu, Taniar and Pardede
sold to
Bicycle Customers
1… 1
1
1 1 2
Seat Frame Wheel
made by
Parts Manufacturers
1… 1…
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 31
Chapter II
Object-Oriented
Features in Oracle™
In this chapter, we will describe Oracle™ features that can be used to support
the implementation of an object-oriented model. As an overview, Section 2.1
will outline some of the original features within a standard relational model. The
next sections will illustrate the additional object-oriented features. We will use
these new features for our implementation in the subsequent chapters.
Relational-Model Features
In a relational model, the attributes are stored as columns of a table and the
records are stored as rows of a table. As in most standard RDBMSs, Oracle™
provides a create-table statement following the SQL standard. After the
declaration of the table name, we define the attributes’ names and their data
types. We can also perform the checking of attribute value. In the table,
Oracle™ enables users to determine the uniqueness of the records by defining
the primary key.
Oracle™ also enables the usage of a foreign key. The foreign-key attribute in
a table refers to another record in another table. In addition to the foreign key,
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
32 Rahayu, Taniar and Pardede
General Syntax:
Example:
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 33
General Syntax:
Example:
Example:
Example:
Example:
UPDATE Student
SET year = ‘2005’
WHERE id = ‘1001’;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
34 Rahayu, Taniar and Pardede
Object-Oriented Features
More recent commercial RDBMSs such as Oracle™ 8 and above (Loney &
Koch, 2000, 2002; ORACLE™ 8, 1997) have extended their database
systems with object-oriented features. In Oracle™ 8 and above, these features
include enhancement of the existing data types with new data types including
object types and user-defined types, and so forth.
General Syntax:
Example:
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 35
General Syntax:
Example:
Collection Types
Oracle™ allows the creation of an array type (varray or varying array). The
syntax is basically using the same statement “create type” with the additional
statement “as varray(n) of” followed by the object or the data type. Following
Figure 2.4, it is possible to have more than one lecturer for a particular course,
and therefore a new array of Persons can be defined.
Another extension is the support of nested tables, as shown in Figure 2.6. To
create a table object, we use the same “create type” statement with the
additional “as table of” statement following the name of the object table. This
object table can then be used as a column in a table. When a table type appears
as the type of a column in a table or as an attribute of the underlying object type,
Oracle™ stores all of the nested table data in a single table, which is associated
with the enclosing table or object type. Every time we create a table with
columns or column attributes whose type is a nested table, we have to include
the nested-table storage clause, “nested table (object table column schema)
store as” followed by the separate storage-table name. Using the previous
example from Figure 2.4, another data type called Person_Table_T can be
created based on the Person_T data type to store the instances of a person.
Note that Oracle™ 9 and above have also enabled users to create multilevel
nested tables.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
36 Rahayu, Taniar and Pardede
General Syntax:
Example:
Object Identifiers
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 37
General Syntax:
Example:
Figure 2.7 illustrates the implementation of using OID to keep the inheritance
between the superclass and its subclasses. Note that we can create a table from
an object and determine the primary keys and foreign keys in this table. Every
time we determine the foreign key, we have to use a “references” statement
followed by the table and the column that is being referred. The general syntax
for this primary key and foreign key implementation is shown in Figure 2.7. The
table created is derived from an object type. Thus, we do not have to specify
the attribute type anymore. They have to be identified while we create the
object type. Note, however, that we can add a constraint “not null” statement
to avoid a “null” value of an attribute. It is needed for particular attributes.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
38 Rahayu, Taniar and Pardede
General Syntax:
Example:
Oracle™ provides a way of referencing from one object to another by using the
keyword ref. This object-referencing technique can be used to replace the
standard “join” operations to traverse from one object to another.
We can then run a query:
SELECT C.course_name
FROM Course C
WHERE C.lecturer.person_name = 'Rahayu';
In the example above, the “scope is” statement is used to specify the exact table
being referenced by the object. Whenever the scope parameter is used, the
database engine will perform a join operation, which can be optimized using
indexes. On the contrary, if the scope parameter is omitted and more than one
table has been created using the given object type, the database engine will
navigate through a set of object reference values in order to identify the location
of the requested records (Dorsey & Hudicka, 1999).
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 39
In the following chapters, we will not use the “scope is” parameter in our table-
creation statement. In most situations, we will not build more than one table for
each object type we declared, thereby avoiding the situation where the
database engine has to navigate through a number of object references. When
only one table is created for the object type, the ref operator will directly point
to the associated reference.
Cluster
General Syntax:
Example:
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
40 Rahayu, Taniar and Pardede
General Syntax:
Example:
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 41
Encapsulation
• In. The value of the actual parameter is passed into the procedure when
the procedure is invoked. Inside the procedure, the formal parameter is
considered read only: It cannot be changed. Then the procedure finishes
and control returns to the calling environment; the actual parameter is not
changed.
• Out. Any value the actual parameter has when the procedure is called is
ignored. Inside the procedure, the formal parameter is considered write
only; it can only be assigned to and cannot be read from. When the
procedure finishes and control returns to the calling environment, the
contents of the formal parameter are assigned to the actual parameter.
• In Out. This mode is a combination of the two previous modes. The value
of the actual parameter is passed into the procedure when the procedure
is invoked. Inside the procedure, the formal parameter can be read from
and written to. When the procedure finishes and control returns to the
calling environment, the contents of the formal parameter are assigned to
the actual parameter.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
42 Rahayu, Taniar and Pardede
General Syntax:
[local variables]
BEGIN
<procedure body>;
END <procedure name>;
Example:
BEGIN
DELETE FROM Student
WHERE id = delete_id;
END Delete_Student;
/
GRANT EXECUTE ON Delete_Student TO Principal;
The stored procedure can have local variables in it. These are variables that are
used only in the procedure body. Within the procedure body, we can use SQL
statements such as select, insert, update, and delete. Thus, methods that are
used to manipulate the database tables can be encapsulated within stored
procedures. To run the procedure, we use the general syntax below.
Apart from stored procedures, stored functions are also available. Similar to
stored procedures, stored functions can be likewise declared as in Figure 2.12.
Note that for a function, we have to declare the type of the return value after
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 43
General Syntax:
[local variables]
BEGIN
<function body>;
RETURN value;
END <function name>;
Example:
v_course VARCHAR(10);
BEGIN
RETURN v_course;
END Student_Course;
/
we declare the function name. In addition, a stored function can take “in”
parameters only.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
44 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 45
General Syntax:
[local variables]
BEGIN
<procedure body>;
END <member procedure name>;
[local variables]
BEGIN
<procedure body>;
END <member function name>;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
46 Rahayu, Taniar and Pardede
Example:
MEMBER PROCEDURE
Delete_Student )
/
MEMBER PROCEDURE
Delete_Student IS
BEGIN
DELETE FROM Student
WHERE Student.id = self.id;
END Delete_Student;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 47
Summary
Similar to many other DBMSs, Oracle™ was first targeted for RDBs. It has
supported standard relational features in SQL including the data-definition
language and the data-manipulation language. Due to the increased demand of
a more powerful database, Oracle™ has added some object-oriented features
into its DBMS. This chapter introduces some of them including the object type,
collection type, inheritance, nested tables, and so forth. A list of references
below provides more information on the syntax and definition of the features
described in this chapter.
References
Dorsey, P., & Hudicka, J. (1999). Oracle™ 8 design using UML object
modelling (chap. 1). Oracle Press, Osborne McGraw Hill.
Fortier, P. (1999). SQL3 implementing the SQL foundation standard.
McGraw Hill.
Loney, K., & Koch, G. (2000). Oracle™ 8i: The complete reference.
Osborne McGraw-Hill.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
48 Rahayu, Taniar and Pardede
Loney, K., & Koch, G. (2002). Oracle™ 9i: The complete reference.
Oracle Press.
ORACLE™ 8. (1997). Oracle™ 8 product documentation library. Red-
wood City, CA: Oracle Corporation.
Urman, S. (2000). Oracle™ 8i advanced PL/SQL programming. Oracle
Press, Osborne.
Chapter Problems
1. Using Oracle™, create a table to store book records. Each record has the
title, the author, the publisher, and the ISBN (International Standard
Book Number) that uniquely differentiate the book.
2. Continuing from Question 1, now we want to refer the attribute publisher
into a table Publisher that has “name” as the primary key. If a deletion is
performed in the publisher table, the associated referring key will be
nullified. Alter your create-table statement from Question 1.
3. Write a statement in Oracle™ to implement an ordered collection type of
the 20 most expensive book prices in a bookstore.
4. As in Question 1, you want to create a table Book. However, you want
to instantiate the table from a specified Book_Type. Write the create-type
and create-table statement.
5. Movie Guide magazine wants to keep a database of directors and the
films that they directed. The director table has the attributes of name, age,
and residence. The film is saved as an object with the attributes of title,
genre, year, and rating. As a director may direct more than one film, the
film object is implemented into the director table using a nesting technique.
Show the implementation of the relationships described.
6. Discuss briefly the two mechanisms of encapsulation to implement meth-
ods or operations in an object-relational DBMS.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Features in Oracle™ 49
Chapter Solutions
3. For an ordered collection with only one data element (in this case the
price), we can use varray.
4. First, create the type and then follow this by creating the table.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
50 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 51
Chapter III
Using Object-Oriented
Features
In Chapter II, we discussed the different features available in Oracle™ that can
be used to implement an object-oriented model. We will use those features in
this chapter. The discussion in this chapter will be categorized based on the
relationship types.
There are three distinct relationship types that we have to consider in object-
oriented modeling for implementation in object-relational databases: inherit-
ance, association, and aggregation. Some manipulations will be needed in order
to accommodate the features of these relationships.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
52 Rahayu, Taniar and Pardede
Figure 3.1 shows an inheritance relationship of union type. It declares that the
union of a group of subclasses constitutes the entire membership of the
superclass. In a union inheritance, we know that every object in the superclass
is an object of at least one of the subclasses. In the example (see Figure 3.1),
the union type does not preclude a member of a subclass from being a member
of another subclass. For example, a person who is a staff member may also be
a student at that university.
In order to simulate the union inheritance, Student and Staff will carry the
primary key of the superclass, Person, in their relational tables. The primary key
of the superclass becomes a foreign key in the subclasses. The foreign keys in
the subclasses are also their primary keys. It becomes the main difference
between the primary-key and foreign-key relationships in association and in
inheritance. Thus, in Figure 3.1 it is noted that the primary key of Person is also
the primary key of both Student and Staff. At the same time, the constraint of
the primary-key and foreign-key relationship between the ID attributes in
Student and Staff and the ID in Person is maintained in order to make sure that
each student and staff is also a person. Thus, we have to specify the referential
integrity constraint every time we want to manipulate the target of a foreign-key
reference.
If we use the newer Oracle™ version, which supports inheritance using the
“under” keyword, we can create Student and Staff subclasses under the
superclass Person. The implementation is shown in Figure 3.3. Note that for
union inheritance, we need to create one table each for the superclass and all
the subclasses. As can be seen in the later sections, this union inheritance has
a different way of implementation compared with other inheritance types. Using
union
Student Staff
course department
year room_no
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 53
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
54 Rahayu, Taniar and Pardede
the “under” keyword, normally we do not need to create separate tables for the
subclasses because the table created for the superclass can also be used to
store the instances of the subclasses. However, in this union type of inheritance,
we need to allow a particular person to be both a student as well as a staff. If
we are to store all instances into one superclass table, we will not be able to
store the two records together as they will violate the primary-key constraints
(i.e., two records with the same ID). Therefore, we need to create a separate
table for each of the subclasses to allow the same person’s record to appear
in both the Student as well as Staff tables. We also need to create a table for
Person to store persons who are neither staff members nor students.
Employee
ID
name
address
mutual exclusion
Manager Worker
annual_salary weekly_wage
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 55
Using the newer Oracle™ version for the same example, we can create
Manager and Worker subclasses under the superclass Employee (see Figure
3.6). Notice that in this type of inheritance, we create only one table for the
superclass. We do not need subclass tables because an object can be a member
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
56 Rahayu, Taniar and Pardede
of only one subclass. These subclasses are instantiations of the superclass. Also
notice that although the table is created from the superclass table, Oracle™
maintains the integrity constraint between the subclass and the superclass table.
We cannot delete the subclass while the superclass table still exists.
In this case, an employee can only be a manager, a worker, or neither. If an
employee is neither a manager nor a worker, he or she is only an object of the
superclass, Employee. If an employee is a manager, for example, he or she will
be an object of the subclass Manager. Thus, the employee will have all of the
attributes of the Manager type and all other attributes that are inherited from the
Employee type. However, all of the subclass tables can be kept in the
superclass table.
Employee
ID
name
address
partition
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 57
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
58 Rahayu, Taniar and Pardede
Student Staff
course department
year room_no
Tutor
no_hours
rate
At the time of this writing, the newer Oracle™ does not support multiple
inheritance using the “under” keyword. This keyword is applicable only to the
single inheritance type. However, this multiple inheritance concept is often
simulated using other existing techniques. For example, we can use the “under”
keyword to implement one inherited parent, and use an association type to link
to the other parent. The drawback of using this technique is that only the parent
type implemented using “under” can be inherited, and therefore we have to be
careful when choosing which parent to inherit and which one to associate.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 59
Relational data structures can be related to the concepts of sets through the fact
that tuples are not in any particular order and duplicate tuples are not allowed.
Therefore, the implementation of association relationships with a set semantic
into object-relational tables is identical to the well-known transformation of
many-to-many or one-to-many relationships from relational modeling to rela-
tional tables.
In relational modeling, many-to-many relationships are converted into tables in
which the primary key is a composite key obtained from the participating
entities. Should there be any attributes of the relationships, these will automati-
cally be added to the tables that represent the many-to-many relationships.
Likewise, in object modeling, if a class has a set relationship with another class
and the inverse relationship is also a set, the transformation of such an
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
60 Rahayu, Taniar and Pardede
1…
taught_by
1 located_in
Lecturer Office
lect_ID 1 1 office_ID
lect_name building_name
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 61
connected tables. This table will have the primary keys of the connected tables
as its primary (composite) key. Each of the primary keys, which form the
composite, is connected to the originated table through a primary-key and
foreign-key relationship.
The second association is a one-to-many relationship between Lecturer and
Course. In order to establish the association relationship in the implementation,
the primary key of the one side, Lecture, becomes a foreign key of the table that
holds the many side, Course.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
62 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 63
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
64 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 65
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
66 Rahayu, Taniar and Pardede
other hand, using the object reference ref, there is no referential integrity
constraint performed. There is the possibility for an object reference to be
dangling if the object it refers to has been accidentally deleted.
One suggestion to avoid this is by applying a foreign key to the object-reference
concept. For example, recalling Figure 3.18, we can create a new version to
add referential integrity into the object reference (see Figure 3.22).
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 67
There are two techniques that can be used in Oracle™ in order to simulate the
implementation of aggregations: the clustering technique and the nesting tech-
nique.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
68 Rahayu, Taniar and Pardede
object can be owned by more than one whole object. For example, HD
controller HDC1 may belong to HD1 as well as HD2.
Depending on the situation, the above nonexclusive type may not be desirable.
We can enforce the aggregation-exclusive type by creating a single primary key
for the part object and treating the cluster key as a foreign key rather than as
part of the primary key. Figure 3.24 shows the implementation of the previous
example as an exclusive type (the implementation of the cluster and the cluster
index remain the same).
Each time a new record is inserted into the part table, HD_Contr, the value of
the cluster key, hd_id, is searched for. If it is found, the new record will be
added to the cluster. The rows of the whole table, Hard_Disk, and the rows of
the part table, HD_Contr, are actually stored together physically (see Figure
3.25). The index is created in order to enhance the performance of the cluster
storage.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 69
CREATE TABLE PC
(pc_id VARCHAR2(10) NOT NULL,
type VARCHAR2(20),
PRIMARY KEY (pc_id))
CLUSTER PC_Cluster(pc_id);
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
70 Rahayu, Taniar and Pardede
Figure 3.27 shows the physical storage of the multiple aggregation relationship
between a PC with Hard_Disk, Monitor, Keyboard, and CPU.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 71
HardDisk_ID Capacity
HD11 2GB
HD12 6GB HD_Contr_ID Description
Contr111 ---
Contr112 ---
Contr121 ---
Contr122 ---
Contr123 ---
Oracle™ also facilitates multilevel nested tables and thus can be used for
implementing a multilevel aggregation relationship. It is implemented by using
the inner and outer table principle (see Figure 3.30). A PC is an aggregation of
several HDs, and a HD is an aggregation of several HD controllers. In this case,
the inner table is a nested table of HD controller, and the outer table is a nested
table of HD. The implementation of this aggregation is shown in Figure 3.31.
Note in the implementation (see Figure 3.29 and Figure 3.31) that we do not
create standard tables for the HD controller. We only need to define a HD
controller type, and define it as a nested table later when we create the Hard
Disk table (for Figure 3.29) and the PC table (for Figure 3.31). It is also shown
that the information of the nested table is stored externally in a table called
HD_Contr_tab. This is not a standard table; no additional constraints can be
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
72 Rahayu, Taniar and Pardede
(reference)
PC001
PC002
HardDisk_ID Contr
(reference)
HD11
HD12
HD21
HD22 HardDisk_ID Description
Contr111 ---
Contr112 ---
Contr121 ---
Contr122 ---
CREATE TABLE PC
(pc_id VARCHAR2(10) NOT NULL,
hd Hard_Disk_Table,
PRIMARY KEY (pc_id))
NESTED TABLE hd STORE AS HD_tab
(NESTED TABLE controller STORE AS HD_Contr_tab);
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 73
attached to this table and no direct access can be performed to this table
without going through the Hard Disk table.
Every whole object can own any part object in the nesting technique, even if that
particular part has been owned by another whole object. The record of the
HD_Contr object will simply be repeated every time a hard disk claims to own
it. This shows a nonexclusive type of aggregation, where a particular part object
can be shared by more than one whole object.
Because there is no standard table created for the HD controller, we cannot
have a primary key for the table, which we usually employ to enforce an
exclusive type of aggregation (see the previous clustering technique).
It is clear from the above sections on clustering and nesting techniques that these
techniques are suitable only for the implementation of the existence-dependent
type of aggregation. The clustering technique supports both nonexclusive and
exclusive aggregation. However, the nesting technique supports only the
nonexclusive type.
In the following section we will see how we can implement an existence-
independent type of aggregation.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
74 Rahayu, Taniar and Pardede
1… 1… 1…
Computer Printer Scanner
comp_ID printer_ID scan_ID
description description description
Lab Aggregate
Lab_ID Lab_ID Printer
location Part_ID printer_ID
Part_type description
Scanner
scan_ID
description
new computers or printers that have not been allocated to any particular lab.
We want to still be able to keep the record of the new parts even when no
associated whole is established.
This situation cannot be implemented using either the clustering or the nested
technique. In the nesting technique, we can only insert a new part record within
the nested table if we have an existing whole record for it. In the clustering
technique, the primary key of the whole serves as the cluster key; thus, it is not
supposed to be null.
Figure 3.33 shows how an Aggregate table is created to store the relationship
between Lab and Computer, Printer, and Scanner. The Aggregate table
contains the primary key of the whole, which is lab_ID, and an attribute called
part_ID, which is the primary key of either one of the part tables (comp_ID,
printer_ID, or scan_ID). The last attribute is called part_type, which is the type
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 75
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
76 Rahayu, Taniar and Pardede
the Aggregate table, and only the part_ID will be the primary key. This will
enforce each part_ID to appear only once within the Aggregate table and be
associated with one particular lab_ID only.
Case Study
Industry_Based_T Academic_T
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 77
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
78 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 79
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
80 Rahayu, Taniar and Pardede
to determine types and tables that we will need to implement the model. For this
case, we need the types Author_T, Industry_T, Academic_T, Research_Staff_T,
Teaching_Staff_T, and Subject_T.
For each of them, we will create the table respectively. We also need a type
Contacts for the multiple-collection varray of the contact_no attribute in
Teaching_Staff_T. Finally, we will need type Course_Manual_T and its table,
and also Chapter_T type and Chapter_Table_T type if we decide to use the
nested-table implementation in an aggregation relationship.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 81
Summary
References
Chapter Problems
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
82 Rahayu, Taniar and Pardede
ences. Assume that there are three object types, that is, University, Book,
and Publisher. Add any attribute where necessary.
2. The City College has just built a new computer laboratory. It has many
PCs in it with their own IDs, capacities, and brands. Although these PCs
are currently located in the new laboratory, they are removable to other
laboratories or offices. Using the clustering technique, show the imple-
mentation of the aggregation relationship described.
3. The Victorian state government stores geographic data in the ranking of
aggregation. Data of the state is an aggregation of the area data, and data
of the area is an aggregation of the suburb data. For the first implemen-
tation, each level contains only an ID and a name as the attributes. Using
a nested table, show the implementation of this case.
4. Saving supermarket is preparing many types of food hampers for the
Christmas season. Each hamper has its own ID and price. It contains items
that can be categorized into biscuit, confectionery, and deli products.
Each category has its own ID, name, and price. These part items can be
sold as a part of the hamper or sold separately. For this purpose,
implement the aggregation relationships as described.
5. The Animal class has attributes ID, name, and description. It has inherit-
ance to three other objects, that is, Fish, Bird, and Mammal. The Fish
object has an attribute of its own, water_habitat. The Bird object has
attributes color, sound, and fly. Mammal has attributes diet and size. Most
of the animals can be allocated to these three objects. However, there is
some problem when an animal like a whale is going to be inserted because
it can be categorized into two different objects. Show the object-oriented
diagram and the implementation for this inheritance relationship.
6. A researcher develops an object-based database for his collection of
technical papers. The attributes for the Technical_Papers object are titles
and authors. One object inherited from a technical paper is
Conference_Paper, which basically contains papers taken from a confer-
ence. The attributes for this object are conference name, conference year,
and conference venue. To make the database more detailed, he inserted
other objects that inherit from Conference_Papers. One of them is
OO_Conf_Papers, which contains all conference papers on object-
oriented topics. It has its local attribute imp_type. Show the diagram and
implementation of the inheritance relationship.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 83
Chapter Solutions
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
84 Rahayu, Taniar and Pardede
PC
CREATE TABLE PC
(lab_id VARCHAR2(3) NOT NULL,
pc_id VARCHAR2(3) NOT NULL,
capacity VARCHAR2(10),
brand VARCHAR2(20),
PRIMARY KEY (lab_id, pc_id),
FOREIGN KEY (lab_id) REFERENCES Lab (lab_id))
CLUSTER Lab_Cluster(lab_id);
3. Using a nested table, we need to create the object from the lowest part
object. For this case, it starts from suburb, then moves to area and then
state.
State
Area
Suburb
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 85
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
86 Rahayu, Taniar and Pardede
h_price NUMBER,
PRIMARY KEY (h_id));
mutual exclusive
Fish_Mammal
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Using Object-Oriented Features 87
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
88 Rahayu, Taniar and Pardede
6. The diagram and the implementation of the inheritance case described can
be solved by using the Oracle™ inheritance facility.
Technical_Papers
Conference_Papers
OO_Conf_Papers
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 89
Chapter IV
Object-Oriented
Methods
The first mechanism has been adopted mostly by pure RDB systems. It allows
information hiding by managing the privileges of each method, as well as
ensuring correctness and consistency of the database by providing specific
methods for accessing the data.
The second mechanism, which is available in object-relational DBMSs such as
Oracle™ 8 and above, is called the member procedure or function. This
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
90 Rahayu, Taniar and Pardede
Stored procedures or functions are PL/SQL programs that are stored in RDBs
and subsequently can be invoked at any time. The benefit of stored procedures
Table
Object-Relational
GRANT
Transformation EXECUTE
(Static)
is_a
Stored
Procedure
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 91
CUSTOMER _T
Implementation of
ID Methods using Grant
last_name Mechanism
first_name (Section 4.1)
total_ bonus_points
Add_ Customer
Update_ Customer_ Points
Delete_ Customer
Check_ Frequent_Customer
Bonus _Check
Customer _Info
Implementation of
Methods using Member
Functions or Procedures
(Section 4 .2)
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
92 Rahayu, Taniar and Pardede
BEGIN
-- When inserting a new customer,
-- the initial default value for total_bonus_points is 0.
EXCEPTION
WHEN <Exception_name> THEN <statements>
Example:
old_bonus_points NUMBER;
BEGIN
SELECT total_bonus_points INTO old_bonus_points
FROM Customer
WHERE id = new_id;
UPDATE Customer
SET total_bonus_points = old_bonus_points + points
WHERE id = new_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO Customer (id, total_bonus_points)
VALUES (new_id, points);
END Update_Customer_Points;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 93
BEGIN
DELETE FROM Customer
WHERE id = delete_id
AND last_name = delete_last_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘Customer does not exist …’);
END Delete_Customer;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
94 Rahayu, Taniar and Pardede
General Syntax:
CURSOR <cursor_name> IS
SELECT <statement>;
BEGIN
FOR <cursor variable> IN <cursor name> LOOP
IF <condition>
THEN <statement>
[ELSEIF <condition>
THEN <statement>]
END IF;
END LOOP;
END <procedure name>;
Example:
CURSOR c_customer IS
SELECT id, last_name, total_bonus_points
FROM Customer;
BEGIN
FOR v_customer_record IN c_customer LOOP
IF (v_customer_record.total_bonus_points > 100) THEN
INSERT INTO FreqClient
VALUES
(v_customer_record.id || ‘ ‘ ||
v_customer_record.last_name || ‘ ‘ ||
' Frequent Customer! ');
END IF;
END LOOP;
END Check_Frequent_Customer;
/
to iterate each record in the database table. When the selection predicate is
met, the record will be displayed on the screen.
Once a stored procedure is created, it is stored in the database. Hence, we can
retrieve the stored procedure using a normal SQL select statement. For
example, to retrieve the stored procedure Add_Customer, we can invoke the
following select statement interactively.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 95
CURSOR c_bonus IS
SELECT id, last_name, total_bonus_points
FROM Customer
WHERE total_bonus_points < minbonus;
BEGIN
END Bonus_Check;
/
General Syntax:
Example:
The result of the select statement in Figure 4.8 is a complete listing of the
procedure Add_Customer. Each line begins with a line number. Users can also
invoke a stored procedure and function through an execute command from
SQL*Plus (Loney & Koch, 2000, 2002; ORACLE™ 8, 1997; Urman, 2000)
as is shown with an example in Figure 4.9.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
96 Rahayu, Taniar and Pardede
BEGIN
SELECT total_bonus_points
INTO v_total_current_points
FROM Customer
WHERE id = s_id;
v_percent_completion :=
v_total_current_points / req_points * 100;
END Customer_Info;
/
Apart from stored procedures, we can also create a stored function (see Figure
4.10). The following example is a function that can be used to get information
about a customer’s bonus points.
With a stored function, we can display the output using a query as shown in
Figure 4.11. The query will return a list of all customers in the Customer table
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 97
together with their current bonus-point status. The required number of bonus
points to get a gold point is 100.
Grant
• User. The privilege is given to particular users, and the user can then
exercise the privilege.
• Role. The privilege is given to particular roles, and the user who has been
granted the role will be able to exercise the privilege.
• Public. The privilege is given to all users.
A grant on a system privilege is the grant to carry out a basic system operation
such as create table, create procedure, and so forth. A grant on a role is the
grant to access the information of the particular role. Finally, a grant on an
object privilege is the grant to do a particular action to a particular object. Thus,
for a grant on an object privilege, we need to declare the schema of the grant-
object target. The general syntax for the grant statement is shown in Figure
4.12.
The use of grants to simulate object-oriented encapsulation is to grant users
with no access to tables, and to grant users with execute accesses to the stored
procedures where the methods are stored. Therefore, the tables are encapsu-
lated with the stored procedures. For example, we want to grant a particular
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
98 Rahayu, Taniar and Pardede
MEMBER PROCEDURE
Update_Customer_Points(c_points IN NUMBER),
MEMBER FUNCTION
Customer_Info(c_req_points IN NUMBER)
RETURN VARCHAR2
)
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 99
MEMBER PROCEDURE
Update_Customer_Points(c_points IN NUMBER) IS
BEGIN
total_bonus_points := total_bonus_points + c_points;
END Update_Customer_Points;
v_percent_completion NUMBER;
BEGIN
-- Calculate the current percentage.
v_percent_completion :=
total_bonus_points / s_req_points * 100;
END Customer_Info;
END;
/
MEMBER PROCEDURE
Update_Customer_Points(s_points IN NUMBER) IS
BEGIN
self.total_bonus_points :=
self.total_bonus_points + s_points;
END Update_Customer_Points;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
100 Rahayu, Taniar and Pardede
Object_name.member_procedure_name
Object_name.member_function_name
From the description in Figure 4.15, it is clear that the main difference between
the normal procedures and functions and the member procedures and functions
is the fact that we do not need to use the working object as a parameter in
member procedures and functions. It is automatically referenced by the current
working object, which eliminates the need to search for it first. Hence, the
parameter new_ID, which is used to locate the current working object, is no
longer necessary.
We can also use the keyword self to identify that the object we are referring
is the current working object. For example, the above member procedure
Update_Customer_Points can be written as follows.
In order to call or to use the above member functions or procedures, we need
a reference to a particular object instance (i.e., the current working object). For
example, in the above case, we need to instantiate a Customer_T object and
use the object to execute the procedures and functions. The syntax for calling
a member function or procedure is shown in Figure 4.16.
The procedure in Figure 4.17 shows how we can use the previous member
procedures and functions. Declarations after “declare” can be an object,
variables, or other declarations.
The example in Figure 4.18 shows how we can call member procedures and
functions by first constructing a single object and then calling the methods that
are applicable to that object. The result for the above procedure is shown after
the code.
The example in Figure 4.18 demonstrates the use of member procedures and
member functions using Option 1 in Figure 4.19.
In Option 2, the object is created from a record within a relational table. We
call the table here Customer and it is used to store customer records. The
following procedure shows how we apply the member procedures and
functions as defined earlier for the Customer_T object to manipulate records
from the Customer table.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 101
General Syntax:
DECLARE <declarations>
BEGIN
<procedure body>
END;
/
Example:
DECLARE
-- Construct a Customer object a_Customer.
a_Customer Customer_T :=
Customer_T(‘980790X’, ‘Smith’, ‘John’, 50);
BEGIN
-- Call procedure to update a_Customer total bonus points
a_Customer.Update_Customer_Points(30);
DBMS_OUTPUT.PUT_LINE
(‘New total points is ‘|| a_Customer.total_bonus_points);
END;
/
• Stored procedures or functions are mainly used for pure relational systems
where there is no member-object concept available. Obviously, member
procedures and member functions are used for systems with an object-
oriented feature, such as object-relational database systems.
• We do not need to use the working object as a parameter in member
procedures or functions. It automatically refers to the current working
object, which eliminates the need to search for it first.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
102 Rahayu, Taniar and Pardede
Construct
Object from a
Procedure
Option 1
Object Type (Class)
Object
Attributes
Member Functions/
Procedures Option 2
Object
Relational Table
Case Study
The Victorian tourism department stores the data of main tourist attractions in
a database that can be accessed from every tourist information centre across
the state. The database contains information about the name of the tourist
destination, location, tourism type, and season. For each destination, the
database provides the accommodations available around the area. The accom-
modation data includes the name, type, rate, address, and the contact details
of the accommodation. Currently, the database is stored in a pure RDB with the
E/R diagram shown next.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 103
Figure 4.20. Member procedure and function call using a relational table
DECLARE
CURSOR c_customer IS
SELECT id, last_name, first_name, total_bonus_points
FROM Customer;
BEGIN
DBMS_OUTPUT.PUT_LINE
(a_Customer.id||’ ’||a_Customer.last_name||’ ’||
a_Customer.total_bonus_points);
DBMS_OUTPUT.PUT_LINE
(‘The new total points is ‘||
a_Customer.total_bonus_points);
END LOOP;
END;
/
There are two query transactions that are frequently made by the users.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
104 Rahayu, Taniar and Pardede
acc_name
name location
acc_ID acc_type
1 1…
TOURIST
ID
DESTINATION ACCOMMODATION
acc_address
acc_rate
type season
acc_contact
Due to the expansion of the database size, the department now wants to
transform the database system into an object-relational system, with frequent
procedures attached to the objects. The design of the object diagram is shown
in Figure 4.22.
We need to show the implementation of the databases using both stored
procedures of a pure relational system and member procedures of an object-
relational system.
First, we create the stored procedures for tables Tourist_Destination and
Accommodation. Assume that these tables already exist. The relational schema
is shown in Figure 4.23 along with the stored procedures. Note that there is a
foreign key of ID in the Accommodation table that references the attribute ID
in the Tourist_Destination table.
The next step is to implement the member procedure. For this step, we start
from the method declaration followed by the method implementation (see
Figure 4.24).
Tourist_Destination Accommodation
id 1 1..* acc_id
name acc_name
location acc_type
type acc_rate
season acc_address
show_tourist_dest acc_contact
show_accommodation
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 105
Relational Schemas
Tourist_Destination (ID, name, location, type, season)
Accommodation (acc_ID, acc_name, acc_type, acc_rate,
acc_address, acc_contact, ID)
Stored Procedures
CREATE OR REPLACE PROCEDURE Show_Tourist_Dest(
new_id IN Tourist_Destination.id%TYPE) AS
new_name Tourist_Destination.name%TYPE;
new_location Tourist_Destination.location%TYPE;
new_type Tourist_Destination.type%TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE
(new_name||‘ ‘||new_location||’ ‘||new_type);
END Show_Tourist_Dest;
/
new_acc_name Accommodation.acc_name%TYPE;
new_acc_address Accommodation.acc_address%TYPE;
new_acc_contact Accommodation.acc_contact%TYPE;
new_destination_name Tourist_Destination.name%TYPE;
new_destination_location Tourist_Destination.location%TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE
(new_acc_name||’ ‘||new_acc_address||’ ‘||new_acc_contact
||’ ‘||new_destination_name||’ ‘||new_destination_location)
END LOOP;
END Show_Accommodation;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
106 Rahayu, Taniar and Pardede
Methods Declaration
CREATE OR REPLACE TYPE Tourist_Destination_T AS OBJECT
(id VARCHAR2(10),
name VARCHAR2(30),
location VARCHAR2(30),
type VARCHAR2(20),
season VARCHAR2(10),
Methods Implementation
CREATE OR REPLACE TYPE BODY Tourist_Destination_T AS
BEGIN
DBMS_OUTPUT.PUT_LINE
(self.name||‘ ‘||self.location||‘ ‘||self.type);
END LOOP;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 107
END Show_Tourist_Dest;
END;
/
new_destination_name Tourist_Destination.name%TYPE;
new_destination_location Tourist_Destination.location%TYPE;
BEGIN
BEGIN
DBMS_OUTPUT.PUT_LINE
(self.acc_name||‘ ‘||self.acc_address||‘ ‘||self.acc_contact
||‘ ‘||new_destination_name||‘ ‘||new_destination_location);
END Show_Accommodation;
END;
/
Summary
In a pure RDB system, packages such as stored procedures and functions are
used to implement operations. With the additional grant mechanism, data
security can be performed with stored procedures and functions so that only a
certain user or role is privileged to access the system, role, and object. In
ORDBMS, the concept of data security can be performed by having member
methods. With the encapsulation feature in the object-oriented model, we can
add member procedures and functions inside a class along with the member
attributes. The declaration and implementation of member methods are sepa-
rated as in other programming-language practices.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
108 Rahayu, Taniar and Pardede
References
Loney, K., & Koch, G. (2000). Oracle™ 8i: The complete reference.
Osborne McGraw-Hill.
Loney, K., & Koch, G. (2002). Oracle™ 9i: The complete reference.
Oracle Press.
ORACLE™ 8. (1997). Oracle™ 8 product documentation library. Red-
wood City, CA: Oracle Corporation.
Urman, S. (2000). Oracle™ 8i advanced PL/SQL programming. Oracle
Press, Osborne.
Chapter Problems
1. King Electronic is going to have its end-of-year 2005 sale. Every year the
owner keeps the record of each item to be put on sale. The data is placed
on an object-based database and table as follows.
Sale2005_T
item_code
item_name
quantity
price
Sale2005
Item_Code Item_Name Quantity Price
SV101 VCR 20 150
SD101 DVD Player 20 225
SD102 DVD Player 2 10 350
ST101 TV 14” 15 400
ST102 TV 21” 20 700
ST103 TV 30” 10 1200
SP101 PS One 40 150
SP102 PS Two 20 450
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 109
a. Write a stored procedure to insert other sale items into the Sale2005
table.
b. Write a stored procedure to update the quantity of the item in the table
every time an item is sold or added to the sale stock.
University_T
name
campus
no_of_students
University
Name Campus No_of_Students
Melbourne University Melbourne 28,000
Monash University Berwick, Caulfield, 45,000
Clayton, Gippsland,
Peninsula
La Trobe University Albury, Beechworth, 22,000
Bundoora, Bendigo,
Mildura,
Deakin University Burwood, Geelong, 31,000
Warrnambool
University of Ballarat Ararat, Ballarat, 18,000
Horsham
Royal Melb. Institute of Bundoora, Brunswick, 54,000
Tech. City
Swinburne University Hawthorn, Lilydale, 10,000
Prahran
Victoria University City, Footscray, Sunbury, 50,000
Sunshine, Werribee
Write a stored procedure to retrieve data from the University table so that
the names of those universities with more than 25,000 students are shown
on the screen.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
110 Rahayu, Taniar and Pardede
Movie
Code Title Year Genre Director Cast Rating
G01 Gone with 1939 Drama Cukor, Leigh, PG
the Wind Fleming Gable
P07 Psycho 1960 Horror Hitchcock Perkins, MA
Miles
S23 Star Wars 1977 Sci_Fi Lucas Hamill, G
Ford
Rating
Rating Description
G Suitable for all viewers
PG Parental guidance recommended for children under 15 years of age
M Mature, recommended for audiences 15 years and over
MA Mature, accompanied by a parent or adult guardian
R Restricted to adults, no one under 18 may view these
X Restricted to adults, sexually explicit material
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 111
Chapter Solutions
BEGIN
INSERT INTO Sale2005
(item_code, item_name, quantity, price)
VALUES
(new_item_code, new_item_name, new_quantity,
new_price);
END Insert_Item;
/
b. CREATE OR REPLACE PROCEDURE Update_Stock(
sold_item_code IN Sale2005.item_code%TYPE,
number_sold IN NUMBER) AS
old_quantity NUMBER;
new_quantity NUMBER;
BEGIN
SELECT quantity INTO old_quantity
FROM Sale2005
WHERE item_code = sold_item_code
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
112 Rahayu, Taniar and Pardede
CURSOR c_university IS
SELECT name, no_of_students
FROM University_T
WHERE no_of_students > 25000;
BEGIN
FOR v_uni_record IN c_university LOOP
DBMS_OUTPUT.PUT_LINE
(v_uni_record.name||‘
‘||v_uni_record.no_of_students);
END LOOP;
END Above_25000;
/
4. CREATE OR REPLACE TYPE Movie_T AS OBJECT
(code VARCHAR2(5),
title VARCHAR2(40),
year NUMBER,
genre VARCHAR2(20),
director VARCHAR2(20),
cast VARCHAR2(50),
rating VARCHAR2(3),
BEGIN
IF rating_code = ‘G’ THEN
RETURN ‘ Suitable for all viewers ‘;
ELSIF rating_code = ‘PG’ THEN
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Object-Oriented Methods 113
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
114 Rahayu, Taniar and Pardede
Chapter V
Generic Methods
Generic methods are the methods used to access the attributes of an object.
The concept behind the need for generic methods is encapsulation, in which
attributes associated with an object can be accessed directly only by the
methods within the object itself. Therefore, each time an attribute is created
within an object, we will need generic methods to access the attribute. This is
the main difference between the standard relational techniques for implement-
ing operations vs. the object-oriented methods. In relational databases, users
normally can directly access attributes of a table by running SQL statements to
update, delete, or insert. This may generate problems when certain attributes
within an object have some constraints applied to them, and therefore the ad
hoc access may violate these constraints.
As discussed in Section 1.3.1, generic methods are tightly related to the update
and delete operations. Therefore, generic methods are associated with the
concept of referential integrity. As in conventional relational systems, for each
update and delete operation, there has to be an identified action to be carried
out (i.e., cascade, restrict, and nullify). The transformation of object structures,
including inheritance, aggregation, and association, involves primary-key and
foreign-key association or object references, depending on the techniques
used to represent the relationships. Therefore, for each object structure,
actions for the update and delete operations have to be identified. In this
section, we will show mainly the application of methods for updating and
deletion, and the actions taken to maintain the referential integrity.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 115
Additionally, the insert and retrieval operations, to some extent, also correlate
with referential integrity. An insertion to a foreign key is known to match with
the associated primary key of another table. A retrieval of a composite object
will need to form join operations between foreign keys and their matching
primary keys.
Figure 5.1 shows an overview of the implementation of generic methods. The
process consists of several steps. First, given an object-oriented model, data-
structure mapping is carried out. This basically applies the static transformation
procedures (Chapter 3). Second, the key elements of each generic method
(operations, parameters, constraints, etc.), which will be used as a basis for the
implementation of the methods, are identified.
Implementation of Methods in
Inheritance Hierarchies
There are some approaches that can be used for inheritance relationships
implementation into tables. The usage of these approaches can be explored
based on the types of inheritance: union inheritance, mutual-exclusion inherit-
ance, partition inheritance, and multiple inheritance. In this section, we are
going to see the implementation of generic methods in inheritance hierarchies.
Note that in Chapter III we described the two different ways of implementing
inheritance in Oracle™. The first method uses a shared ID, which is mainly used
Methods
SQL and PL/SQL
Member Methods
and Functions
OO Methods
Methods-
Implementation
Declaration
(Chapter 4,5)
and -Execution
Procedures
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
116 Rahayu, Taniar and Pardede
We recall from Chapter III that the first technique for implementing union
inheritance into relational tables is done by creating a separate table for the
superclass and a table for each of the subclasses. A shared ID is used to
preserve the identity of the objects across tables. Suppose Figure 5.2 is a union
inheritance. Each class, together with its local attributes in the inheritance
schema, is mapped into a table. This way of mapping is often called a vertical
division since the list of attributes of a subclass is divided into several classes.
In the example, the declaration of attributes or properties belonging to an
academic (i.e., ID, name, address, department) has to be divided into two
tables, namely, table Customer and table Academic. This kind of declaration
follows the way the class is declared. Since class Customer is already declared
first, class Academic that inherits from class Customer merely adds a few more
attributes. Inheritance provides a reuse mechanism whereby the definition of a
new class is based on some existing classes. Consequently, the creation of new
subclasses from scratch can be avoided; instead, some or all parts of the
existing classes can be reused in the new classes.
Figure 5.3 shows the results of the implementation of this union inheritance
including the methods. Note that we use member methods instead of an
Customer
ID
name
address
union
Commercial Academic
ACN department
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 117
There are a few things to observe from the implementation of the union
inheritance example as shown in Figure 5.3 and Figure 5.4.
First is that we provide not only the relational schemas, but also the SQL
statements to create and manipulate the schemas. Some sample records are
also provided to help readers visualise the implementation of union inheritance.
Second is that attribute ID of the subclass (e.g., class Commercial and
Academic) is also a foreign key referencing to the superclass. This is to ensure
that a subclass OID must exist as an OID in the superclass. Notice also that the
Relational Schemas
Customer (ID, name, address)
Commercial (ID, ACN)
Academic (ID, department)
Methods Declaration
CREATE OR REPLACE TYPE Customer_T AS OBJECT
(id VARCHAR2(10),
name VARCHAR2(30),
address VARCHAR2(30),
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
118 Rahayu, Taniar and Pardede
Methods Implementation
CREATE OR REPLACE TYPE BODY Customer_T AS
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 119
BEGIN
INSERT INTO Customer
VALUES (new_id, new_name, new_address);
END Insert_Customer;
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id;
END Delete_Customer;
END;
/
BEGIN
INSERT INTO Customer
VALUES (new_id, new_name, new_address);
INSERT INTO Commercial
VALUES (new_id, new_acn);
END Insert_Commercial;
BEGIN
DELETE FROM Commercial
WHERE Commercial.id = self.id;
DELETE FROM Customer
WHERE
(Customer.id = self.id) AND
(Customer.id NOT IN
(SELECT Academic.id
FROM Academic
WHERE Academic.id = self.id)) AND
(Customer.id NOT IN
(<selection of any other sibling sub-classes>);
END Delete_Commercial;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
120 Rahayu, Taniar and Pardede
BEGIN
INSERT INTO Customer
VALUES (new_id, new_name, new_address);
INSERT INTO Academic
VALUES (new_id, new_department);
END Insert_Academic;
BEGIN
DELETE FROM Academic
WHERE Academic.id = self.id;
DELETE FROM Customer
WHERE
(Customer.id = self.id) AND
(Customer.id NOT IN
(SELECT Commercial.id
FROM Commercial
WHERE Commercial.id = self.id)) AND
(Customer.id NOT IN
(<selection of any other sibling sub-classes>);
END Delete_Academic;
END;
/
DECLARE
-- Construct objects, initialize them to null
a_customer Customer_T := Customer_T(NULL,NULL,NULL);
a_commercial Commercial_T := Commercial_T(NULL,NULL);
a_academic Academic_T := Academic_T(NULL, NULL);
BEGIN
-- Call member procedures to insert data into
-- Customer, Commercial, and Academic tables.
a_customer.Insert_Customer
(‘1’, ‘Myers Pty Ltd’, Melbourne’);
a_commercial.Insert_Commercial
(‘2’, ‘Coles Pty Ltd’, ‘Sydney, ‘443-765’);
a_academic.Insert_Academic
(‘3’ ‘La Trobe Univ’, ‘Bundoora’, ‘Comp Sc.’);
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 121
Sample Records:
Customer
ID Name Address
1 Myer Pty Ltd. Melbourne
2 Coles Pty Ltd. Sydney
3 LaTrobe Univ. Bundoora
4 Monash Univ. Gippsland
5 RMIT Univ. Melbourne
6 Victoria Univ. Footscray
7 Holmes Inst. Melbourne
8 Federal Gov. Canberra
Commercial Academic
ID ACN ID Department
1 123-423 3 Comp. Sc.
2 443-765 4 Info. Tech
7 011-333 5 Comp. Sc.
6 Informatics
7 Info. Studies
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
122 Rahayu, Taniar and Pardede
Customer:
INSERT INTO Customer
VALUES (&new_id, &new_name, &new_address);
Commercial:
INSERT INTO Customer
VALUES (&new_id, &new_name, &new_address);
INSERT INTO Commercial
VALUES (&new_id, &new_acn);
Academic:
INSERT INTO Customer
VALUES (&new_id, &new_name, &new_address);
INSERT INTO Academic
VALUES (&new_id, &new_department);
the usual generic method. Examples of the usual generic methods are shown in
Figure 5.5. Notice that we use an ampersand in front of a user-defined variable.
Fifth is regarding deletion. Deleting customer records is straightforward, and
because delete is cascaded, the deletion will automatically be carried out to the
matching records in the subclasses. However, the deletion of subclass records
(such as deleting an academic object) is rather complex as we cannot apply the
same method as that for customer deletion. This is because the deleted subclass
records may still exist in other sibling subclasses in which the matched
superclass record should not be deleted. Therefore, we first delete the intended
subclass record, and then we check whether this record does not exist in other
sibling subclass tables. If it does not exist, we can delete the root record in the
superclass table.
Sixth, update methods are not provided because the OID is immutable and an
update to the OID is not permitted. The update of nonkey attributes is isolated
to the relevant table only; hence, no complexity arises in an update.
Finally, the sample records show that customer Holmes Institute is a commer-
cial as well as an academic customer, and customer Federal Government is
neither a commercial customer nor an academic customer (both examples are
printed in bold and italic). These two objects illustrate the fact that this is a union
inheritance.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 123
The implementation example mentioned in detail (see Figure 5.3) is made using
the older Oracle™ version, which does not provide the inheritance feature.
However, as mentioned previously, Oracle™ 9 and the newer version have
provided an inheritance relationship (see Figure 5.6).
To accommodate union inheritance with the newer Oracle™ version, we create
the tables for each type. However, we use a supertype table, Customer, only
for data that do not belong to any of the subtype classes. In the sample records
(see Figure 5.4), it will be the Federal Government. If we know that the data
belongs to any subtype class, we can use subtype member methods straight-
away. The weakness is that there will be repetition of a customer’s common
attributes in each of its subtype tables. This repetition is at a cost not only in
insertion time, but also in storage space. Nevertheless, it has benefits compared
with the previous Oracle™ version. We can insert into many subtype tables
using their member methods without having to use a simple generic method
Methods Declaration
CREATE OR REPLACE TYPE Customer_T AS OBJECT
(id VARCHAR2(10),
name VARCHAR2(30),
address VARCHAR2(30),
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
124 Rahayu, Taniar and Pardede
Methods Implementation
CREATE OR REPLACE TYPE BODY Commercial_T AS
BEGIN
INSERT INTO Commercial
VALUES (new_id, new_name, new_address, new_acn);
END Insert_Commercial;
BEGIN
DELETE FROM Commercial
WHERE (Commercial.id = self.id);
END Delete_Commercial;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 125
BEGIN
INSERT INTO Academic
VALUES (new_id, new_name, new_address, new_department);
END Insert_Academic;
BEGIN
DELETE FROM Academic
WHERE (Academic.id = self.id);
END DeleteAcademic;
END;
/
Methods Execution Example
DECLARE
a_customer Customer_T := Customer_T(NULL,NULL,NULL);
a_commercial Commercial_T := Commercial_T(NULL,NULL,NULL,NU
a_academic Academic_T := Academic_T(NULL,NULL,NULL, NULL);
BEGIN
a_customer.Insert_Customer
(‘8’, ‘Federal Gov’, ‘Canberra’);
a_commercial.Insert_Commercial
(‘7’, ‘Holmes Inst’, ’Melbourne’, ‘011-333’);
a_academic.Insert_Academic
(‘7’, ‘Holmes Inst’, ’Melbourne’, ‘Info. Studies’);
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
126 Rahayu, Taniar and Pardede
because the insertion of each table is done without first inserting into the
supertype table.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 127
Relational Schemas
Customer (ID, name, address, cust_type)
Commercial (ID, ACN)
Academic (ID, department)
Methods Declaration
CREATE OR REPLACE TYPE Customer_T AS OBJECT
(id VARCHAR2(10),
name VARCHAR2(30),
address VARCHAR2(30),
cust_type VARCHAR2(15),
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
128 Rahayu, Taniar and Pardede
Methods Implementation
CREATE OR REPLACE TYPE BODY Customer_T AS
BEGIN
INSERT INTO Customer
VALUES (new_id, new_name, new_address, NULL);
END Insert_Customer;
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id
AND Customer.cust_type IS NULL;
END Delete_Customer_OID;
BEGIN
DELETE FROM Customer
WHERE self.<attribute> = deleted_attribute
AND self.cust_type IS NULL;
END Delete_Customer_non_OID;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 129
BEGIN
INSERT INTO Customer
VALUES (new_id, new_name, new_address, 'Commercial');
INSERT INTO Commercial
VALUES (new_id, new_acn);
END Insert_Commercial;
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id
AND self.cust_type = 'Commercial';
END Delete_Commercial_OID;
BEGIN
DELETE FROM Customer
WHERE Customer.id IN
(SELECT Commercial.id
FROM Commercial
WHERE self.<attribute> = deleted_attribute)
AND self.cust_type = 'Commercial';
END Delete_Commercial_non_OID;
END;
/
BEGIN
INSERT INTO Customer
VALUES (new_id, new_name, new_address, 'Academic');
INSERT INTO Academic
VALUES (new_id, new_department);
END Insert_Academic;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
130 Rahayu, Taniar and Pardede
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id
AND self.cust_type = 'Academic';
END Delete_Academic_OID;
BEGIN
DELETE FROM Customer
WHERE Customer.id IN
(SELECT Academic.id
FROM Academic
WHERE self.<attribute> = deleted_attribute)
AND self.cust_type = 'Academic';
END Delete_Academic_non_OID;
END;
/
Commercial Academic
ID ACN ID Department
1 123-423 3 Comp. Sc.
2 443-765 4 Info. Tech
5 Comp. Sc.
6 Informatics
one “delete from” statement and varies the OID type to be deleted. Notice also
that an optional predicate in which the type is checked appears in the “delete
from” statements. This additional predicate is useful to ensure that the OID to
be deleted is of the correct subtype. Other than this, the additional predicate
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 131
Methods Declaration
CREATE OR REPLACE TYPE Customer_T AS OBJECT
(id VARCHAR2(10),
name VARCHAR2(30),
address VARCHAR2(30),
cust_type VARCHAR2(15),
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
132 Rahayu, Taniar and Pardede
Methods Implementation
CREATE OR REPLACE TYPE BODY Customer_T AS
BEGIN
INSERT INTO Customer
VALUES (Customer_T(new_id, new_name, new_address, NULL));
END Insert_Customer;
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id;
END Delete_Customer;
END;
/
BEGIN
INSERT INTO Customer
VALUES
(Commercial_T(new_id, new_name, new_address,
‘Commercial’, new_acn));
END Insert_Commercial;
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id;
END Delete_Commercial;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 133
new_name IN VARCHAR2,
new_address IN VARCHAR2,
new_department IN VARCHAR2)IS
BEGIN
INSERT INTO Customer
VALUES
(Academic_T(new_id, new_name, new_address,
‘Academic’, new_department));
END Insert_Academic;
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id;
END DeleteAcademic;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
134 Rahayu, Taniar and Pardede
Relational Schemas
Similar to the one in mutual exclusion (Figure 5.6)
Methods Declaration
CREATE OR REPLACE TYPE Customer_T AS OBJECT
(id VARCHAR2(10),
name VARCHAR2(30),
address VARCHAR2(30),
cust_type VARCHAR2(15))
/
The creation of commercial and academic subtypes and tables is the same
as in mutual-exclusion inheritance (Figure 5.6).
Methods Implementation
Methods implementation for commercial and academic subtypes is the same
as in mutual-exclusion inheritance (Figure 5.6).
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 135
Commercial Academic
ID ACN ID Department
1 123-423 3 Comp. Sc.
2 443-765 4 Info. Tech
5 Comp. Sc.
6 Informatics
implementation in Figure 5.10. The only difference is the “not null” constraint
for the cust_type attribute during the table creation.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
136 Rahayu, Taniar and Pardede
Relational Schemas
Customer (ID, name, address)
Commercial (ID, ACN)
Academic (ID, department)
Private_Ed (ID, sponsor_board)
Methods Declaration
The creation of customer, commercial, and academic types is the same as
in union inheritance (Figure 5.3).
Methods Implementation
Methods implementation for customer, commercial, and academic is the
same as in union inheritance (Figure 5.3).
BEGIN
INSERT INTO Customer
VALUES (new_id, new_name, new_address);
INSERT INTO Commercial
VALUES (new_id, new_acn);
INSERT INTO Academic
VALUES (new_id, new_department);
INSERT INTO Private_Ed
VALUES (new_id, new_sponsor_board);
END Insert_Private_Ed;
MEMBER PROCEDURE Delete_Private_Ed IS
BEGIN
DELETE FROM Customer
WHERE Customer.id = self.id;
END Delete_Private_Ed;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 137
Sample Records:
Customer
ID Name Address
1 Myer Pty Ltd. Melbourne
2 Coles Pty Ltd. Sydney
3 LaTrobe Univ. Bundoora
4 Monash Univ. Gippsland
5 RMIT Univ. Melbourne
6 Victoria Univ. Footscray
7 Holmes Inst. Melbourne
8 Federal Gov. Canberra
Third, the insertion of the first three tables is also identical to that of union
inheritance. The new insertion is applied to the new table. Notice that the
insertion order is top down from the least specialized class (table Customer) to
the table Private_Ed.
Fourth, like creation and insertion, the deletion of the first three tables is the
same as that of union inheritance. The deletion of records from the new table
is simplified, however, so as to delete the root record only. The effect is that
matching records of all tables underneath this root table will be deleted as well
due to the foreign-key referential integrity constraint where deletion is cas-
caded.
Finally, the sample records show that customer Holmes Institute appears in the
new table Private_Ed. It shows that Holmes Institute is a commercial customer
as well as an academic customer. It also belongs to the category private
educational institution, where private educational institution is both commercial
and academic.
We do not provide the implementation of multiple inheritance using newer
Oracle™ versions because at the time of this writing, there is still no support
for multiple inheritance.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
138 Rahayu, Taniar and Pardede
Implementation of Methods in
Association Relationships
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 139
Relational Schemas
Author (ao_ID, name, address)
Course_Manual (ISBN, title, year)
Publish (author, course_manual)
Methods Declaration
CREATE OR REPLACE TYPE Author_T AS OBJECT
(ao_id VARCHAR2(3),
name VARCHAR2(10),
address VARCHAR2(20),
Methods Implementation
CREATE OR REPLACE TYPE BODY Author_T AS
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
140 Rahayu, Taniar and Pardede
BEGIN
INSERT INTO Author
VALUES (new_ao_id, new_name, new_address);
END Insert_Author;
BEGIN
DELETE FROM Publish
WHERE Publish.author IN
(SELECT REF(a)
FROM Author a
WHERE a.ao_id = self.author_id);
END Delete_Author;
END;
/
BEGIN
INSERT INTO Course_Manual
VALUES (new_isbn, new_title, new_year);
END Insert_Course_Manual;
BEGIN
DELETE FROM Publish
WHERE Publish.course_manual IN
(SELECT REF(b)
FROM Course_Manual b
WHERE b.isbn = self.course_id);
END Delete_Course_Manual;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 141
BEGIN
SELECT REF(a) INTO author_temp
FROM Author a
WHERE a.ao_id = new_ao_id;
BEGIN
DELETE FROM Publish
WHERE
Publish.author IN
(SELECT REF(a)
FROM Author a
WHERE a.ao_id = deleted_ao_id) AND
Publish.course_manual IN
(SELECT REF(b)
FROM Course_Manual b
WHERE b.isbn = deleted_isbn);
END Delete_Publish;
/
DECLARE
a_author Author_T := Author_T(NULL,NULL,NULL);
a_course_manual Course_Manual_T :=
Course_Manual_T(NULL,NULL,NULL);
BEGIN
a_author.Insert_Author (‘S2’, ‘Smith’, ‘Sydney’);
a_course_manual.Insert_Course_Manual
(‘1234’, ‘Database System’, 2002);
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
142 Rahayu, Taniar and Pardede
Publish
ao_id isbn
S2 1234
Teaching_Staff_T Subject_T
1 1…
total_hour code
contact_no: sub_name
<varray> venue
Implementation of Methods in
Aggregation Relationships
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 143
Relational Schemas
Teaching_Staff (ao_ID, total_hour, contact_no)
Subject (code, sub_name, venue, lecturer)
Methods Declaration
CREATE OR REPLACE TYPE Contacts AS VARRAY(3) OF NUMBER
/
Methods Implementation
CREATE OR REPLACE TYPE BODY Teaching_Staff_T AS
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
144 Rahayu, Taniar and Pardede
BEGIN
INSERT INTO Teaching_Staff
VALUES (new_ao_id, new_ttl_hour, Contacts
(new_number1, new_number2, new_number3));
END Insert_Teaching_Staff;
BEGIN
DELETE FROM Subject b
WHERE b.lecturer.ao_id = self.ao_id;
DELETE FROM Teaching_Staff a
WHERE a.ao_id = self.ao_id;
END Delete_Teaching_Staff;
END;
/
BEGIN
SELECT REF(a) INTO new_lecturer
FROM Teaching_Staff a
WHERE ao_id = teach_ao_id;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 145
BEGIN
DELETE FROM Subject b
WHERE b.code = self.code;
END Delete_Subject;
END;
/
Course_Manual_T
ISBN
title
year
1
1…
Chapter_T
chapter_no
chapter_title
page_no
In the clustering technique, the primary key of the whole table is specified as the
cluster key. This key will be the one that groups the part tables together.
Physically, this key is stored only once, and connected to it will be all the part
records that are associated with it. The implementation of Figure 5.19 using the
clustering technique is described in Figure 5.20.
The relational schemas for the clustering technique show that the cluster key,
ISBN (the primary key of the whole table), will be carried by each of the part
tables. If we have more than one part table in the example, then each of them
will have ISBN as one of the attributes. Note that c_no by itself is not a primary
key (not unique) for the Chapter table; however, c_no combined with ISBN is
unique within the Chapter table.
The generic method of implementation in relational tables using the clustering
technique is not different from that of the standard insert, delete, and update
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
146 Rahayu, Taniar and Pardede
procedures. We can simply ignore the cluster when we perform the data
manipulation as a cluster key is an internal structure needed to make data
storage and retrieval more efficient when a particular model is implemented.
Figure 5.22 shows the nested-table technique. The attribute chapter within the
Course_Manual table is an object reference that is referencing to a nested table
called Chapter. We cannot place the attribute of Chapter (e.g., c_no) in
Course_Manual as we usually do in a foreign-key relationship. This is because
c_no is not a primary key of Chapter. There may be course manuals with the
same chapter numbers but entirely different contents. In addition, the link
between Course_Manual and Chapter is established through object references
Relational Schemas
Course_Manual (ISBN, title, year)
Chapter (ISBN, c_no, c_title, c_page_no)
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 147
c_page_no NUMBER,
PRIMARY KEY (isbn, c_no),
FOREIGN KEY (isbn) REFERENCES Course_Manual(isbn))
CLUSTER CM_Cluster(isbn);
Methods Implementation
CREATE OR REPLACE PROCEDURE Insert_Course_Manual(
new_isbn IN VARCHAR2,
new_title IN VARCHAR2,
new_year IN NUMBER) AS
BEGIN
INSERT INTO Course_Manual
VALUES (new_isbn, new_title, new_year);
END Insert_Course_Manual;
/
BEGIN
INSERT INTO CHAPTER
VALUES (new_isbn, new_c_no, new_c_title,
new_c_page_no);
END Insert_Chapter;
BEGIN
DELETE FROM Course_Manual
WHERE isbn = deleted_isbn;
END Delete_Course_Manual;
/
BEGIN
DELETE FROM Chapter
WHERE c_no = deleted_c_no;
END Delete_Chapter;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
148 Rahayu, Taniar and Pardede
Sample Records:
Course_Manual
ISBN Title Year
1234 Database System 2002
Chapter
ISBN C_No C_Title Page_No
1234 1 Introduction 20
1234 2 Database Concepts 50
(the internal reference of each individual chapter) rather than through the
attribute value. Note also that there is no primary key in the Chapter table.
From the implementation above, note that we cannot insert new chapters
without an associating course manual. This enforces the existence-dependent
concept, where the existence of each part object is dependent on its associated
whole object.
The keyword the in the above insert statement is used to represent the nested
table Chapter. Since Chapter is not a standard table, we cannot use its name
in order to populate it. The use of the (we can also use table instead) also
ensures that each record within the nested table has an associated record from
the whole table, in this case the Course_Manual table. Note also that the select
statement must return one row only; otherwise, the query will return an error.
To avoid this problem, we usually use a primary key as the selection attribute
to ensure uniqueness.
Figure 5.23 describes the relationship between the whole table and its nested
table (part table).
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 149
Relational Schemas
Course_Manual (ISBN, title, year, chapter)
Chapter (c_no, c_title, page_no)
Methods Declaration
Methods Implementation
CREATE OR REPLACE TYPE BODY Course_Manual_T AS
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
150 Rahayu, Taniar and Pardede
BEGIN
INSERT INTO Course_Manual
VALUES (new_isbn, new_title, new_year,
Chapter_Table_T(Chapter_T(new_c_no, new_c_title,
new_c_page_no)));
END Insert_Course_Manual;
BEGIN
DELETE FROM Course_Manual a
WHERE a.isbn = self.isbn;
END Delete_Course_Manual;
BEGIN
INSERT INTO THE
(SELECT c.chapter
FROM Course_Manual c
WHERE c.isbn = new_isbn)
VALUES (new_c_no, new_c_title, new_c_page_no);
END Insert_Chapter;
BEGIN
DELETE FROM THE
(SELECT c.chapter
FROM Course_Manual c
WHERE c.isbn = self.isbn);
END Delete_Chapter;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 151
COURSE_MANUAL Table
(Whole Table)
Case Study
Recall the AEU case study in Chapter 1. The union wants to add generic
methods in its object-relational database. However, only objects with frequent
changes will have member procedures attached to them. Figure 5.24 shows the
partition of the AEU database diagram with the object attributes and object
methods.
To implement the object-oriented model, we will follow the systematic steps
that follow.
• Type and table. For this case, we need the types Employee_T,
Office_Staff_T, Organizer_T, Teacher_T, and School_T. For each of
them, we will create the table respectively. For this case study, we will use
a nested table; thus, we need to add type Area_T and its table, and also
the Suburb_T type and Suburb_Table_T for the aggregation relationship.
• Inheritance relationship. There is one mutual-exclusion inheritance rela-
tionship between Employee_T and its subclasses. We have to add another
attribute in the Employee_T class, emp_type, to perform the mutual-
exclusive feature.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
152 Rahayu, Taniar and Pardede
Employee_T
emp_ID teaches in
emp_name
emp_address 1… 1…
Teacher_T School_T
insert_emp 1…
teacher_ID sch_ID
delete_emp teacher_name sch_type
represents teacher_address sch_name
mutual exclusive insert_teacher sch_address
delete_teacher insert_sch
1 delete_sch
Office_Staff_T Organizer_T 1
emp_ID emp_ID assigned in
1
skills length_service
insert_off insert_org Area_T
1 area_ID
delete_off delete_org
area_name
insert_area
delete_area
1
1…
Suburb_T
sub_ID
sub_name
insert_sub
delete_sub
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 153
Methods Declaration
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
154 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 155
Methods Implementation
CREATE OR REPLACE TYPE BODY Employee_T AS
BEGIN
INSERT INTO Employee
VALUES (new_emp_id, new_emp_name, new_emp_address, NULL);
END Insert_Emp;
BEGIN
DELETE FROM Employee
WHERE Employee.emp_id = self.emp_id
AND Employee.emp_type IS NULL;
END Delete_Emp;
END;
/
BEGIN
INSERT INTO Employee
VALUES Office_Staff_T(new_emp_id, new_emp_name, new_emp_address,
'Office_Staff', new skills);
END Insert_Off;
BEGIN
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
156 Rahayu, Taniar and Pardede
END;
/
BEGIN
INSERT INTO Employee
VALUES (new_emp_id, new_emp_name,
new_emp_address, 'Organizer', new_length_service);
END Insert_Org;
BEGIN
DELETE FROM Employee
WHERE Employee.emp_id = self.emp_id;
END Delete_Org;
END;
/
BEGIN
SELECT REF(a) INTO new_organizer
FROM Organizer a
WHERE emp_id = representation_emp_id;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 157
BEGIN
DELETE FROM Teacher
WHERE Teacher.teacher_id = self.teacher_id;
END Delete_Teacher;
END;
/
BEGIN
INSERT INTO School
VALUES (new_sch_id, new_sch_name, new_sch_address, new_sch_type);
END Insert_Sch;
BEGIN
DELETE FROM Teach_In
WHERE Teach_In.school IN
(SELECT REF(a)
FROM School a
WHERE a.sch_id = self.sch_id);
END;
/
BEGIN
SELECT REF(a) INTO teacher_temp
FROM Teacher a
WHERE a.teacher_id = new_teacher_id;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
158 Rahayu, Taniar and Pardede
END Insert_Teach_In;
/
BEGIN
DELETE FROM Teach_In
WHERE
Teach_In.teacher IN
(SELECT REF(a)
FROM Teacher a
WHERE a.teacher_id = deleted_teacher_id) AND
Teach_In.school IN
(SELECT REF(b)
FROM School b
WHERE b.sch_id = deleted_sch_id);
END Delete_Teach_In;
/
BEGIN
SELECT REF(a) INTO new_organizer
FROM Organizer a
WHERE emp_id = assigned_org_id;
BEGIN
DELETE FROM Area a
WHERE a.area_id = self.area_id;
END Delete_Area;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 159
BEGIN
INSERT INTO THE
(SELECT a.Suburb
FROM Area a
WHERE a.area_id = new_area_id)
VALUES (new_sub_id, new_sub_name);
END Insert_Suburb;
BEGIN
DELETE FROM THE
(SELECT a.Suburb
FROM Area a
WHERE a.area_id = self.area_id);
END Delete_Suburb;
END;
/
Summary
Chapter Problems
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
160 Rahayu, Taniar and Pardede
employee data. The employee data are kept in an object Employee_T and
can be divided into two child objects: Guide_T and Admin_T. An
employee can be categorized as a guide or an administration staff, but he
or she can also be both. This is important because in the peak season, an
administration worker might be needed to guide the tours and vice versa.
The objects and the attributes are shown below.
Employee_T
ID
name
address
salary
insert_employee
delete_employee
union
Guide_T Admin_T
ID ID
language comp_skills
country office_skills
insert_guide insert_admin
delete_guide delete_admin
Assume that the tables for each object have been created; write the
implementation of insertion into and deletion from tables Employee and
Guide.
2. Continuing the case of Giant Travel in Question 1, management now wants
employees’ roles to become more specialized based on their major
potentials. Since one employee can be only a guide or an administration
staff, for that purpose, another attribute emp_type must be added to the
Employee_T object. However, there are some records in the Employee
table that are not categorized into the Guide or Admin object, that is, the
managers.
Assume that the tables for each object have been created; write the
implementation of insertion into and deletion from tables Employee and
Admin.
3. Continuing the case of Giant Travel in the previous questions, management
now wants to create another object under the Employee_T object named
Management_T, which obviously contains all the data of the managers. All
employees must be categorized in one, and only one, child type.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 161
Employee_T
ID
name
address
salary
insert_employee
delete_employee
partition
Assume that the tables for each object have been created; write the
implementation of insertion into and deletion from tables Employee and
Management. Note that we want to delete the managers’ records from the
finance department.
4. The following figure shows the relationship among objects Supervisor_T,
Student_T, and Subject_T in a university. A student can take many
subjects, and a subject can be taken by many students. For every subject
a student takes, there is a mark given.
In another relationship, a student can be supervised by only one supervi-
sor, but a supervisor can supervise many students. Assume that objects
have been created and the tables from these objects are shown.
supervised_by enrolls_in
1…
Supervisor_T Student_T Subject_T
spv_ID 1 1… student_ID 1… subject_ID
spv_name student_name subject_name
insert_spv insert_student insert_subject
delete_spv delete_student delete_subject
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
162 Rahayu, Taniar and Pardede
Supervisor Student
Spv_ID Spv_Name Student_ID Student_Name
1001 Steve Donaldson 11013876 Robert Tan
1003 Erin Goldsmith 11014832 Julio Fernandez
1007 Tony Wibowo 11014990 Colin Brown
Subject
Subject_ID Subject_Name
CSE31DB Database System
CSE31UIE User Interface Engineering
CSE42ADB Advanced Database
Enrolls_In
Student_ID Subject_Code Mark
11013876 CSE31DB 86
11013876 CSE31UIE 90
11014832 CSE31ADB 78
11014990 CSE31DB 74
11014990 CSE31UIE 70
a. Write generic methods to insert into and delete from table Enrolls_In.
b. Write generic member methods to insert into and delete from table
Supervisor.
5. Village Records’ database keeps its artists as objects. Every artist has
recorded and released at least one album. This album is kept as a nesting
table inside the artist object.
Artist
code
name
residence
contract_no
insert_artist
delete_artist
insert_album
delete_album
1…
Album
album_code
album_no
album_title
album_year
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 163
Chapter Solutions
BEGIN
INSERT INTO Employee
VALUES (new_id, new_name, new_address, new_salary);
END Insert_Employee;
BEGIN
DELETE FROM Employee
WHERE Employee.id = self.id;
END Delete_Employee;
END;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
164 Rahayu, Taniar and Pardede
BEGIN
INSERT INTO Guide
VALUES (new_id, new_name, new_address, new_salary,
new_language, new_country);
END Insert_Guide;
BEGIN
DELETE FROM Guide
WHERE Guide.id = self.id;
END Delete_Guide;
END;
/
2. CREATE OR REPLACE TYPE BODY Employee_T AS
BEGIN
INSERT INTO Employee
VALUES (new_id, new_name, new_address, new_salary,
NULL);
END Insert_Employee;
BEGIN
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 165
END;
/
BEGIN
INSERT INTO Employee
VALUES (new_id, new_name, new_address, new_salary,
‘Admin’);
INSERT INTO Admin
VALUES (new_id, new_comp_skills, new_office_skills);
END Insert_Admin;
BEGIN
DELETE FROM Employee
WHERE Employee.id = self.id
AND Employee.employee_type = ‘Admin’;
END Delete_Admin;
END;
/
3. CREATE OR REPLACE TYPE BODY Management_T AS
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
166 Rahayu, Taniar and Pardede
BEGIN
INSERT INTO Management
VALUES (new_id, new_name, new_address, new_salary,
new_department, new_year_service);
END Insert_Manag;
BEGIN
DELETE FROM Management
WHERE Management.id = self.id;
END Delete_Manag;
END;
/
4. a. CREATE OR REPLACE PROCEDURE Insert_Enrolls_In(
new_student_id IN VARCHAR2,
new_subject_id IN VARCHAR2) AS
BEGIN
SELECT REF(a) INTO student_temp
FROM Student a
WHERE a.student_id = new_student_id;
BEGIN
DELETE FROM Enrolls_In
WHERE
Enrolls_In.student IN
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 167
(SELECT REF(a)
FROM Student a
WHERE a.student_id = deleted_student_id) AND
Enrolls_In.subject IN
(SELECT REF(b)
FROM Subject b
WHERE b.subject_id = deleted_subject_id);
END Delete_Enrolls_In;
/
b. CREATE OR REPLACE TYPE BODY Supervisor_T AS
BEGIN
INSERT INTO Supervisor
VALUES (new_spv_id, new_spv_name);
END insert_spv;
BEGIN
— Supervised_by is the ref of Supervisor in the
Student_T object.
DELETE FROM Student b
WHERE b.supervised_by.spv_id = self.spv_id;
DELETE FROM Supervisor a
WHERE a.spv_id = self.spv_id;
END delete_spv;
END;
/
5. a. CREATE OR REPLACE TYPE BODY Artist_T AS
BEGIN
INSERT INTO THE
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
168 Rahayu, Taniar and Pardede
(SELECT a.album
FROM Artist a
WHERE a.code = new_code)
VALUES (new_album_code, new_album_no,
new_album_title, new_album_year);
END Insert_Album;
BEGIN
DELETE FROM THE
(SELECT a.Album
FROM Artist a
WHERE a.code = self.code);
END Delete_Album;
END;
/
b. CREATE OR REPLACE PROCEDURE Show_Album(
new_artist_name IN VACRHAR2) AS
CURSOR c_album IS
SELECT album_title, album_year
FROM THE
(SELECT album
FROM Artist
WHERE artist_name = new_artist_name);
BEGIN
FOR v_curs IN c_album LOOP
DBMS_OUTPUT.PUT_LINE
(v_curs.album_title||‘ ‘||v_curs.album_year);
END LOOP;
END Show_Album;
/
6. a. CREATE OR REPLACE PROCEDURE Insert_Album(
new_code IN VARCHAR2,
new_album_code IN VARCHAR2,
new_album_no IN NUMBER,
new_album_title IN VARCHAR2,
new_album_year IN VARCHAR2) AS
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
Generic Methods 169
BEGIN
INSERT INTO Album
VALUES (new_code, new_album_code, new_album_no,
new_album_title, new_album_year);
END Insert_Album;
/
BEGIN
DELETE FROM Album
WHERE album_code = deleted_album_code;
END Delete_Album;
/
b. CREATE OR REPLACE PROCEDURE Insert_Artist(
new_code IN VARCHAR2,
new_name IN VARCHAR2,
new_residence IN VARCHAR2,
new_contract_no IN VARCHAR2) AS
BEGIN
INSERT INTO Artist
VALUES (new_code, new_name, new_residence,
new_contract_no);
END Insert_Artist;
/
BEGIN
DELETE FROM Artist
WHERE code = deleted_code;
END Delete_Artist;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
170 Rahayu, Taniar and Pardede
Chapter VI
User-Defined Queries
User-Defined Queries in
Inheritance Hierarchies
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 171
primary key and foreign key or using the “under” keyword, we will show user-
defined queries for both techniques in the following sections.
Subclass Query
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
172 Rahayu, Taniar and Pardede
Superclass
Subclass
Queries
Subclass
Subclass
Subclass Subclass
Superclass Query
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 173
Example 1:
Find the contact number(s) of an author whose name is David Taniar.
SELECT contact_no
FROM Author a, Teaching_Staff b
WHERE a.ao_id = b.ao_id
AND a.name = ‘David Taniar;
The above query shows that we only need to join based on the common
shared ID, which is ao_ID. Since the contact number is a varray, the above
query will show the following result:
CONTACT_NO
-----------------------------
CONTACTS (99059693, 94793060)
Example 2:
Find the institution of an author whose name is David Taniar.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
174 Rahayu, Taniar and Pardede
Subclass
Subclass
Subclass Subclass
Example 3:
Find the details of the author(s) whose institution name is Monash
University.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 175
Example 4:
Find the details of authors who belong to the industry-based type.
tion of its type along with any other further subclasses of the subclass. The
general syntax of such a query is as follows.
User-Defined Queries in
Association Relationships
Referencing Query
A referencing query is a query from a class that holds the object reference (ref)
to a class that is being referenced. The class that is being referenced is the class
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
176 Rahayu, Taniar and Pardede
Class X Class Y
1 1…
Referencing Query
where: The referencing table or class is the one that holds the many side in an
association relationship.
Example 5:
SELECT b.lecturer.total_hour
FROM Subject b
WHERE b.sub_name = ‘Databases’;
that holds the one side in a one-to-many relationship. Figure 6.13 depicts a
referencing query.
The query representation for referencing a query is shown in Figure 6.14, while
Figure 6.15 shows an example of this query type.
In the previous example, no join is performed. Rather, we are using object
referencing from Teaching Staff to Subject through the lecturer attribute, which
is of ref data type.
Example 6 (Figure 6.16) also shows a referencing type of query whereby a path
traversal through the object references is used rather than the usual join
operation. Without the facility of object references (ref) in Oracle™, we would
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 177
have to use a join operation between Subject and Teaching Staff to perform the
above queries.
Dereferencing Query
A dereferencing query is a query from the referred class to a class that holds
the object reference (ref). In a many-to-many relationship, both classes that are
connected are the referred classes. Figure 6.17 below shows two types of
dereferencing queries.
Class X Class Y
1…
1
Dereferencing Query
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
178 Rahayu, Taniar and Pardede
where:
The referencing join takes the form of
<referring class attribute = REF(referred class)>.
SELECT a.title
FROM Course_Manual a, Author b, Publish c
WHERE c.course_manual = REF(a)
AND c.author = REF(b)
AND b.name = ‘John Smith’;
User-Defined Queries in
Aggregation Hierarchies
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 179
Example 8:
In the relationship between Course Manual and Author, display all course
manuals along with the names of the author(s), showing only those authors
who live in Melbourne.
Part Query
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
180 Rahayu, Taniar and Pardede
Whole
Class Part
Nested table
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 181
Whole Query
Whole Class
Part
Nested table
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
182 Rahayu, Taniar and Pardede
Figure 6.30. Query for whole information in the table using the nesting
technique
Example 13:
In the relationship between Course Manual and Chapter implemented using the
nesting technique, display all course manuals together with their
associated chapters.
SELECT *
FROM Course_Manual;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 183
Figure 6.31. Query for whole information using the nesting technique by
unnesting
Example 14:
In the relationship between Course Manual and Chapter implemented using the
clustering technique, display the course-manual ISBN and course-manual
title that has an associated chapter-number 1 entitled “Introduction to
Object-Relational.”
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
184 Rahayu, Taniar and Pardede
Oracle™ has also introduced collection types as alternative data types. They
are other features of an object-oriented database that need to be adopted by
RDBMSs. One of the types, which is the nested table, has been mentioned
previously when we discussed aggregation relationships. In this section, we will
discuss multiple collection types that can increase the power of ORDBMS
application.
One of the new collection types introduced by Oracle™ is an array type called
varray. This type can be stored in database tables. When used as an attribute
type in a table, varray is stored in line with the other attributes within the table.
Example 1 (see Section 6.1.1) demonstrates a subclass query that retrieves an
array type of attribute. Retrieving the whole array can be done through SQL
queries. The following example shows how we can retrieve information when
the selection predicate is of the varray type.
It is not possible to access an individual element of an array type using an SQL
query only. As shown above, we need to use a procedure whereby we can
retrieve and manipulate the array elements. Furthermore, we have to make sure
that during the insertion of the varray in the above example, there are three
values to input. If there are only two contact numbers, the third value, null,
should be inserted. It is needed to avoid error during the query process. The
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 185
Example 16:
Find the details of authors whose contact numbers include 94793060.
DECLARE
CURSOR c_contact IS
SELECT a.name, a.address, b.contact_no
FROM Author a, Teaching_Staff b
WHERE a.ao_id = b.ao_id;
BEGIN
DBMS_OUTPUT.PUT_LINE(‘AuthorName:’||
v_contactrec.name||’Author Address:’||
v_contactrec.address);
END IF;
END LOOP;
END;
/
Example 17:
Update one of the contact numbers of an author whose ao_ID is 123 from
94793060 to 94793000.
DECLARE
Contacts Teaching_Staff.contact_no%TYPE;
BEGIN
SELECT b.contact_no
INTO contacts
FROM Author a, Teaching_Staff b
WHERE a.ao_id = b.ao_id
AND a.ao_id = ‘123’;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
186 Rahayu, Taniar and Pardede
following example shows how we can select a stored varray in a variable so that
it can be manipulated.
Note that because the main purpose of this section is to demonstrate collection
types, we will assume that each table that is needed for the examples has
already been created. Whenever access to an inheritance hierarchy is used in
the examples, we will assume the implementation method uses a shared ID. For
example, in the defined cursor of Figure 6.35, we will need to use treat if we
only implement one superclass table for the inheritance hierarchy (as shown in
Figure 6.5).
Varray has several methods that can be used for accessing elements. Some of
the methods are shown below.
First, Last returns the index of the first (or last) element within the array
Next, Prior returns the index of the next (or prior) element within an array,
relative to a specified element
Exists returns ”true” if the entry exists in the array
Count returns the total number of elements within an array
Limit returns the maximum number of elements of an array
Extend adds elements to an array
Trim removes elements from the end of an array
Delete removes specified elements from an array
The following example shows how we can display the last element of an array
using the “last” keyword for collection types. Note that the last element may not
necessarily be the upper boundary of the varray. For example, we may define
a varray of three elements, but since there are only two elements loaded in an
array, the last element will be element number 2.
In Section 6.3, we have seen how we can manipulate a nested table using SQL
queries as one of the methods for an aggregation relationship. Another way of
manipulating a nested-table structure is by retrieving the whole nested table into
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 187
Example 18:
Find the last contact number of an author whose ao_ID is 123
DECLARE
Contacts Teaching_Staff.contact_no%TYPE;
BEGIN
SELECT b.contact_no
INTO contacts
FROM Author a, Teaching_Staff b
WHERE a.ao_id = b.ao_id
AND a.ao_id = ‘123’;
END;
/
a variable, and then manipulating the values within a procedure. The following
example shows how we can manipulate a nested table.
Note that we use the method Last in the above example to check for the last
record within the nested table. All the methods that are applicable for varray
are applicable for the nested table except for Limit. This method will return null
in a nested table because there is no explicit maximum size for a nested table.
Unlike varray that retains the ordering of its elements when stored, a nested
table does not preserve its ordering in the database storage. This is because
varray maintains its element in line within the main table, whereas a nested table
is stored independently of the associated main table.
So far we have seen how we can create association relationships with object
references using REF. REF is not the only object references feature available.
Oracle™ also provides other operators that will allow us to navigate object
references. The operators include VALUE, DEREF, and IS DANGLING. We
will consider each operator in the following section:
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
188 Rahayu, Taniar and Pardede
Example 19:
Find the total number of chapters in a course manual published by an author
with ao_ID 123.
DECLARE
v_chapters Course_Manual.chapter%TYPE;
BEGIN
SELECT a.chapter
INTO v_chapters
FROM Course_Manual a, Author b, Publish c
WHERE c.course_manual = REF(a)
AND c.author = REF(b)
AND b.ao_id = ‘123’;
END;
/
Example 20:
using value to compare the return value of a query
VALUE
Value is used to retrieve the value of row objects. It is only applicable to object
type, and thus it will be invalid to use for retrieving row tables. This operator
might be useful to compare objects and find whether they have the same values.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 189
Example 21:
Retrieve the information about the teaching staff using a deref to Subject.
Example 22:
Check whether or not there is any dangling reference from Subject to
Teaching Staff (notice that Subject has an attribute called lecturer, which
is of type ref).
Example 23:
Copy a subject into a new subject if the code is CSE42ADB and the venue is
ELT2.
DECLARE
S1 Subject_T;
BEGIN
SELECT VALUE(s) INTO S1
FROM Subject s, Teaching_Staff t
WHERE s.lecturer = REF(t);
AND s.code = ‘MAT42’
AND s.venue = ‘ELT2’;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
190 Rahayu, Taniar and Pardede
DEREF
Deref is used to return the object of an object reference. Note that a Deref of
a ref is the same as a value.
IS DANGLING
Whenever an object has an object reference (ref) pointing to it, this object is
not supposed to be deleted. If it is deleted, the reference is said to be dangling
or pointing to nothing. “Is dangling” is used to check whether or not a particular
reference is pointing to an existing object.
Unfortunately, in the implementation of object references, there is no implicit
referential integrity checking such as the one found in primary-key and foreign-
key relationships. The ref operator does not automatically avoid any deletion
of the referenced objects in the earlier version of Oracle™. However, new
releases after Oracle™ 8 provide referential integrity checking with object
references.
Example 24a:
Create an object table Author with all the attributes
as specified in Chapter 3 (Case Study).
Object Table
Object Type
Author Table
Author
Ao_ID Name Address
ao_ID
name
address
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 191
Example 25:
Find all information about course-manual ISBN number 1268-9000.
SELECT *
FROM Course_Manual;
We have seen in most of our examples how to create and manipulate an object
table. An object table (or often called a row object) is a database table created
based on an object type. Thus, each row within the table actually represents the
values of an object.
Another technique of making an object persistent in object-relational data-
bases is by creating an object attribute (or often called a column object). An
object attribute is actually an attribute of a relational table that is of object type.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
192 Rahayu, Taniar and Pardede
Example 26:
Create a varray of object attributes Authors within the Course_Manual
table.
SELECT *
FROM Course_Manual;
The following examples 24a and 24b show the differences between an object
table and object attribute.
Example 24b shows how we can have an attribute of an object type in our
relational table. This notion of object attributes can also be used to link a table
with an object, for example, to link Course_Manual and Author. However,
when using object attributes, there is no table created for the object attribute.
Therefore, we can only retrieve the author information through the
Course_Manual table. If we need to be able to index and manipulate author
information independently, then we need to create a separate table for
Author_T and define a link between the tables.
Although we cannot manipulate the Author object attribute within the
Course_Manual table, we still can display the value of the object attribute using
a simple SQL query as shown below.
We can also have a collection of object attributes. In other words, we can have
an attribute whose value is a collection of objects instead of just a single object.
Example 26 shows how we can create a varray of Authors objects.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 193
We have introduced the use of clusters in the previous chapters, mainly in the
context of the implementation of aggregation hierarchies. The clustering tech-
nique, as opposed to the nesting technique, is more of a physical mechanism in
which the database engine will cluster together rows that are connected using
the same cluster key.
While the clustering technique can be very useful in implementing aggregation
hierarchies, Oracle™ actually supports another physical mechanism of cluster-
ing rows together called an index-organization table. It allows us to physically
cluster and order a table based on its primary key. The main difference between
clustering and index organization is that clustering allows multiple table clusters,
whereas the index-organization table allows only a single table cluster.
This difference is the main reason why index-organization tables may not be
suitable for the implementation of aggregation hierarchies. In most situations,
aggregation hierarchies consist of many different parts connected to a whole
object. However, if what we have is a homogenous aggregation, with one whole
object and one part object, then the following index-organization structure can
be used.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
194 Rahayu, Taniar and Pardede
Case Study
Recall the AEU case study in Chapters 1 and 5. The union now wants to add
some user-defined methods for several queries that are often made. These
queries will be implemented as member methods of the classes. The user-
defined queries that will be implemented are listed as follows.
• Query to show the price, date of purchase, and the brand of a vehicle. It
is a superclass query and will be implemented as a member method in the
subclass Vehicle_T.
• Query to show the details of a property building. It is a subclass query and
will be implemented as a member method in the superclass Property_T.
• Query to find the organizer’s name and her or his address for a particular
teacher. It is a referencing query and will be implemented as a member
method in the class that holds the object reference, Teacher_T.
• Query to find the details of the union where a particular employee works.
It is a referencing query and will be implemented as a member method in
the class that holds the object reference, Employee_T.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 195
Methods Declaration
CREATE OR REPLACE TYPE Union_T AS OBJECT
(union_id VARCHAR2(10),
union_state VARCHAR2(20),
union_head VARCHAR2(30),
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
196 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 197
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
198 Rahayu, Taniar and Pardede
Methods Implementation
CREATE OR REPLACE TYPE BODY Union_T AS
v_total NUMBER;
BEGIN
SELECT SUM(b.prop_price) INTO v_total
FROM Union_Table a, Property b
WHERE b.in_union = REF(a)
AND a.union_id = self.union_id;
END show_ttl_prop;
END;
/
CREATE OR REPLACE TYPE BODY Employee_T AS
v_state VARCHAR2(20);
BEGIN
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 199
END;
/
CURSOR c_show_teacher_org IS
SELECT TREAT (VALUE(a) AS Organizer).emp_name, d.sch_name
FROM Employee a, Teacher b, Teach_In c, Schools d
WHERE b.representation = REF(a)
AND c.teacher = REF(b)
AND c.school = REF(d)
AND a.emp_id = self.emp_id;
BEGIN
FOR v_show_teacher_org IN c_show_teacher_org LOOP
DBMS_OUTPUT.PUT_LINE
(v_show_teacher_org.emp_name||‘ ‘||
v_show_teacher_org.sch_name);
END LOOP;
END show_teacher_org;
END;
/
CURSOR c_show_org_teacher IS
SELECT TREAT (VALUE(a) AS Organizer).emp_name, TREAT (VALU
Organizer).emp_address
FROM Employee a, Teacher b
WHERE b.representation = REF(a)
AND b.teacher_id = self.emp_id;
BEGIN
FOR v_show_org_teacher IN c_show_org_teacher LOOP
DBMS_OUTPUT.PUT_LINE
(v_show_org_teacher.emp_name||‘ ‘||
v_show_org_teacher.emp_address);
END LOOP;
END show_org_teacher;
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
200 Rahayu, Taniar and Pardede
END;
/
CURSOR c_show_sub_area IS
SELECT b.sub_id, b.sub_name
FROM Area a, TABLE(a.suburb) b
WHERE a.area_name = self.area_name
BEGIN
FOR v_show_sub_area IN c_show_sub_area LOOP
DBMS_OUTPUT.PUT_LINE
(v_show_sub_area.sub_id||‘ ‘||
v_show_sub_area.sub_name);
END LOOP;
END show_sub_area;
END;
/
CURSOR c_show_building IS
SELECT b.bld_name, b.bld_address
FROM Property a, Buildings b
AND a.prop_id = b.prop_id;
BEGIN
FOR v_show_building IN c_show_building LOOP
DBMS_OUTPUT.PUT_LINE
(v_show_building.bld_name||‘ ‘||
v_show_building.bld_address);
END LOOP;
END show_building;
END;
/
CURSOR c_show_price_date IS
SELECT a.prop_price, a.prop_date
FROM Property a, Vehicle b
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 201
BEGIN
FOR v_show_price_date IN c_show_price_date LOOP
DBMS_OUPUT.PUT_LINE
(v_show_price_date.prop_price||‘ ‘||
v_show_price_date.prop_date||‘ ‘||
v_show_price_date.brand);
END LOOP;
END show_vehicle_detail;
END;
/
CURSOR c_show_room IS
SELECT room_no, room_occupant
FROM Room
WHERE prop_id = self.bld_id;
BEGIN
FOR v_show_room IN c_show_room LOOP
DBMS_OUTPUT.PUT_LINE
(v_show_room.room_no||‘ ‘||
v_show_room.room_occupant);
END LOOP;
END show_room;
END;
/
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
202 Rahayu, Taniar and Pardede
Figure 6.48 shows the AEU database diagram with the attributes and methods.
For simplicity, we ignore the generic methods implemented in Chapter 5.
For the implementation section, we will re-create the class and tables so that
we can see the user-defined methods declarations. In this case, the declarations
will not include the generic member methods as shown in the Chapter 5 case
study. Figure 6.49 shows the whole implementation for the user-defined
methods in this case study.
Summary
Chapter Problems
1. The animal pound (AP) has always maintained records of every animal
they have had. They keep the records in a hierarchical relationship. Some
examples of the data kept in the tables are shown below.
a. Create a superclass query to retrieve the date_in of all big dogs
(height is more than 35 cm).
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 203
b. Create a sub- and superclass query to retrieve the age of the small
dogs (height is less than 25 cm or weight is less than 10 kg).
Cats
breed
mutual
Pet_Animal exclusive Dogs
diet breed
Animal
union age height
ID weight
sex Wild_Animal
date_in diet
habitat
Animal
ID Sex Date_In
a243 M 7/12/01
a244 M 9/12/01
a245 F 3/1/02
a246 F 3/1/02
a247 F 3/1/02
a248 M 10/1/02
Pet Animal
ID Diet Age Pet_Type Breed Height Weight
a243 meat 1 dogs Labrador 40 10
retriever
a244 meat 5 dogs Pugs 30 8
a246 meat 7 dogs German 60 25
shepherd
a247 meat 2 dogs Fox terrier 20 8
a248 grain 1 null
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
204 Rahayu, Taniar and Pardede
Publisher Author
P_ID P_Name P_City A_ID A_Name A_Residence
H01 Harper Collins NYC A23 Allende, Isabel Spain
K02 Knopf London B35 Bronte, Charlotte UK
L02 Little, Brown, & Co Boston B36 Bronte, Emily UK
P02 Penguin Classic London C28 Courtenay, Bryce Australia
P04 Penguin Australia Sydney H09 Hugo, Victor France
S02 Simon and Schuster NYC K04 King, Stephen USA
Book Written_By
B_ID B_Title B_Year B_Price Publish Book Author
F123 The Complete Story 1980 16 P02 F123 B35
F342 The Potato Factory 1998 18 P04 F123 B36
F345 Dreamcatcher 2000 15 S02 F342 C28
F453 Les Miserables 1980 12 P02 F345 K04
F488 The House of the 1985 12 K02 F453 H09
Spirits
F499 Daughter of Fortune 1999 19 H01 F488 A23
F560 Solomon’s Songs 1999 19 P04 F499 A23
F560 C28
Artist 1 Album
code album_code
name album_no
residence album_title
1… year
contract_no
Artist
Code Name Residence Contract_No Album
BK Bryan King Tamworth 13576345
1
PA Paige Alexander Sydney 14534321 2
R Rogue Melbourne 12093722 3
TB Tim Ball Melbourne 12092834 4
VQ Valerie Quinton Melbourne 12098546 5
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 205
Artist
Album_Code Album_No Album_Title Year
1 BK1 1 Bryan King 1999
2 PA1 1 Paige Alexander 1999
PA2 2 Paige 2001
3 R1 1 Rogue 2001
4 TB1 1 Tim Ball Vol 1 1997
TB2 2 Tim Ball Vol 2 1999
5 TB3 3 Tim Ball Vol 3 2002
VQ1 1 Valerie 2002
4. Village Records wants to expand their stock by selling videos of the artists.
Therefore, they want to use a clustering technique instead of a nesting table.
Below are the new tables.
Artist
Code Name Residence Contract_No
BK Bryan King Tamworth 13576345
PA Paige Sydney 14534321
Alexander
R Rogue Melbourne 12093722
TB Tim Ball Melbourne 12092834
VQ Valerie Quinton Melbourne 12098546
Album
Artist_Code Album_Code Album_No Album_Title Year
BK BK1 1 Bryan King 1999
PA PA1 1 Paige Alexander 1999
PA PA2 2 Paige 2001
R R1 1 Rogue 2001
TB TB1 1 Tim Ball Vol 1 1997
TB TB2 2 Tim Ball Vol 2 1999
VQ VQ1 1 Valerie 2002
Video
Artist_Code Video_Code Video_No Video_Title
BK VBK1 1 Bryan King in Concert
PA VPA1 1 Paige
R VR1 1 Rogue in Rod Laver Arena
R VR2 2 Rogue World
TB VTB1 1 Sydney Concert Tim Ball
TB VTB2 2 Tim Acoustic
a. Create a part query to retrieve the album title and video of the artist
with contract number 12093722.
b. Create a whole query to retrieve the details of the artists for whom
there are both an album and a video in stock
5. A real-estate agency keeps records of its tenants, which include the
tenant_number, tenant_name, tenant_address, tenant_co_number, and
ref_list. Ref_list is a type of varray of two references of the tenants.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
206 Rahayu, Taniar and Pardede
1 1…
Person Land
p_ID l_ID
p_name l_address
p_address l_price
p_contact_no
Chapter Solutions
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 207
CURSOR c_tenants IS
SELECT tenant_number, tenant_name, tenant_address,
tenant_contact_no, ref_list
FROM Tenants;
BEGIN
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
208 Rahayu, Taniar and Pardede
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.
User-Defined Queries 209
Object Attribute: We create only one table. In this case, as there is only
one person who owns each piece of land, we create an object attribute of
Person_T inside the Land table. Notice we are not using ref in connecting
the object.
Copyright © 2006, Idea Group Inc. Copying or distributing in print or electronic forms without written
permission of Idea Group Inc. is prohibited.