Oracle9i OLAP Developer's Guide to the OLAP API Release 2 (9.2) Part Number A95297-01 |
|
Understanding Cursor Classes and Concepts, 2 of 6
A Cursor
retrieves the result set defined by a Source
. Creating a Cursor
for a Source
requires at least two intermediate steps. After creating a Source
that defines the data that you want to retrieve from the data store, you create a Cursor
for that Source
by doing the following:
CursorManagerSpecification
by passing the Source
to the createCursorManagerSpecification
method on the DataProvider
that you are using. The CursorManagerSpecification
has CursorSpecification
objects in a structure that mirrors the structure of the Source
.CursorManager
by calling the createCursorManager
method on the DataProvider
and passing it the CursorManagerSpecification
. The CursorManager
creates Cursor
objects. It also manages the local data cache for its Cursor
objects and is aware of changes to the Source
for a dynamic query. If the Source
for the CursorManagerSpecification
has inputs, then you must also pass to the createCursorManager
method an array of Source
objects for those inputs.Cursor
by calling the createCursor
method on the CursorManager
. The structure of the Cursor
mirrors the structures of the CursorManagerSpecification
and the Source
. The CursorSpecification
objects of a CursorManagerSpecification
specify the behavior of their corresponding Cursor
objects. If the Source
for the CursorManagerSpecification
has inputs, then you must also pass to the createCursor
method an array of CursorInput
objects that specify values for the input Source
objects.For an example of creating a Cursor
, see Chapter 9.
This architecture provides great flexibility in fetching data from a result set and in selecting data to display. You can do the following:
CursorManagerSpecification
object for the same Source
. You can specify different behavior on the CursorSpecification
components of the various CursorManagerSpecification
objects in order to retrieve and display different sets of values from the same result set. You might want to do this when displaying the data from a Source
in different formats, such as in a table and a crosstab.Source
produced by the Template
has changed. If you add a CursorManagerUpdateListener
to the CursorManager
for a Source
, then the CursorManager
notifies the CursorManagerUpdateListener
when the Source
for a dynamic query has changed and you that therefore need to update the CursorManagerSpecification
for the CursorManager
.CursorManagerSpecification
for a CursorManager
. If you are using Template
objects to produce a dynamic query and the state of a Template
changes, then the Source
produced by the Template
changes. If you have created a Cursor
for the Source
produced by the Template
, then you need to replace the CursorManagerSpecification
for the CursorManager
with an updated CursorManagerSpecification
for the changed Source
. You can then create a new Cursor
from the CursorManager
.Cursor
objects from the same CursorManager
and set different fetch sizes on those Cursor
objects. You might do this when you want to display the same data as a table and as a graph.Some Source
objects do not specify data that a Cursor
can retrieve from the data store. The following are Source
objects for which you cannot create a Cursor
.
Source
that specifies an operation that is not computationally possible. An example is a Source
that specifies an infinite recursion.Source
that defines an infinite result set. An example is the fundamental Source
that represents the set of all String
objects.Source
that has no elements or includes another Source
that has no elements. Examples are a Source
returned by the getEmptySource
method on DataProvider
and another Source
derived from the empty Source
. Another example is a derived Source
that results from selecting a value from a primary Source
that you got from an MdmDimension
and the selected value does not exist in the dimension.When you create a derived Source
or change the state of a Template
, you create the Source
in the context of the current Transaction
. The Source
is active in the Transaction
in which you create it or in a child Transaction
of that Transaction
. A Source
must be active in the current Transaction
for you to be able to create a Cursor
for it.
Creating a derived Source
occurs in a write Transaction
. Creating a Cursor
occurs in a read Transaction
. After creating a derived Source
, and before you can create a Cursor
for that Source
, you must change the write Transaction
into a read Transaction
by calling the prepareCurrentTransaction
and commitCurrentTransaction
methods on the TransactionProvider
your application is using. For information on Transaction
and TransactionProvider
objects, see Chapter 7.
|
Copyright © 2000, 2002 Oracle Corporation. All Rights Reserved. |
|