Oracle9i OLAP Developer's Guide to the OLAP API Release 2 (9.2) Part Number A95297-01 |
|
Retrieving Query Results, 5 of 6
To manage the display of the result set retrieved by a CompoundCursor
, you sometimes need to know the extent of its child Cursor
components. You might also want to know the position at which the current value of a child Cursor
starts in its parent CompoundCursor
. You might want to know the span of the current value of a child Cursor
. The span is the number of positions of the parent Cursor
that the current value of the child Cursor
occupies. You can calculate the span by subtracting the starting position of the value from its ending position and subtracting 1.
Before you can get the extent of a Cursor
or get the starting or ending positions of a value in its parent Cursor
, you must specify that you want Oracle OLAP to calculate the extent or those positions. To specify the performance of those calculations, you use methods on the CursorSpecification
for the Cursor
.
Example 9-10 specifies calculating the extent of a Cursor
. The example uses the CursorManagerSpecification
from Example 9-9.
CompoundCursorSpecification rootCursorSpec = (CompoundCursorSpecification) cursorMngrSpec.getRootCursorSpecification(); rootCursorSpec.setExtentCalculationSpecified(true);
You can use methods on a CursorSpecification
to determine whether the CursorSpecification
specifies the calculation of the extent of a Cursor
as in the following example.
boolean isSet = rootCursorSpec.isExtentCalculationSpecified();
Example 9-11 specifies calculating the starting and ending positions of the current value of a child Cursor
in its parent Cursor
. The example uses the CursorManagerSpecification
from Example 9-9.
CompoundCursorSpecification rootCursorSpec = (CompoundCursorSpecification) cursorMngrSpec.getRootCursorSpecification(); // Get the List of CursorSpecification objects for the outputs. // Iterate through the list, specifying the calculation of the extent // for each output CursorSpecification. Iterator iterOutputSpecs = rootCursorSpec.getOutputs().iterator(); ValueCursorSpecification valCursorSpec = (ValueCursorSpecification) iterOutputSpecs.next(); while(iterOutputSpecs.hasNext()) { valCursorSpec.setParentStartCalculationSpecified(true); valCursorSpec.setParentEndCalculationSpecified(true); valCursorSpec = (ValueCursorSpecification) iterOutputSpecs.next(); }
You can use methods on a CursorSpecification
to determine whether the CursorSpecification
specifies the calculation of the starting or ending positions of the current value of a child Cursor
in its parent Cursor
, as in the following example.
boolean isSet; Iterator iterOutputSpecs = rootCursorSpec.getOutputs().iterator(); ValueCursorSpecification valCursorSpec = (ValueCursorSpecification) iterOutputSpecs.next(); while(iterOutputSpecs.hasNext()) { isSet = valCursorSpec.isParentStartCalculationSpecified(); isSet = valCursorSpec.isParentEndCalculationSpecified(); valCursorSpec = (ValueCursorSpecification) iterOutputSpecs.next(); }
Example 9-12 determines the span of the positions in a parent CompoundCursor
of the current value of a child Cursor
for two of the outputs of the CompoundCursor
. The example uses the salesAmountsForSelections
Source
from Example 9-8.
The example gets the starting and ending positions of the current values of the time and product selections and then calculates the span of those values in the parent Cursor
. The parent is the root CompoundCursor
. The TransactionProvider
is tp
, the DataProvider
is dp
, and output
is a PrintWriter
.
Source salesAmountsForSelections = salesAmount.join(customerSel) .join(productSel); .join(timeSel); .join(channelSel); .join(promotionSel); try{ tp.prepareCurrentTransaction(); } catch(NotCommittableException e){ output.println("Caught exception " + e + "."); } tp.commitCurrentTransaction(); // Create a CursorManagerSpecification for salesAmountsForSelections CursorManagerSpecification cursorMngrSpec = dp.createCursorManagerSpecification(salesAmountsForSelections); // Get the root CursorSpecification from the CursorManagerSpecification. CompoundCursorSpecification rootCursorSpec = (CompoundCursorSpecification) cursorMngrSpec.getRootCursorSpecification(); // Get the CursorSpecification objects for the outputs List outputSpecs = rootCursorSpec.getOutputs(); ValueCursorSpecification timeSelValCSpec = (ValueCursorSpecification) outputSpecs.get(2); \\ output for time ValueCursorSpecification prodSelValCSpec = (ValueCursorSpecification) outputSpecs.get(3) \\ output for product // Specify the calculation of the starting and ending positions timeSelValCSpec.setParentStartCalculationSpecified(true); timeSelValCSpec.setParentEndCalculationSpecified(true); prodSelValCSpec.setParentStartCalculationSpecified(true); prodSelValCSpec.setParentEndCalculationSpecified(true); // Create the CursorManager and the Cursor SpecifiedCursorManager cursorMngr = dp.createCursorManager(cursorMngrSpec); CompoundCursor cursor = (CompoundCursor) cursorMngr.createCursor(); // Get the child Cursor objects ValueCursor baseValCursor = cursor.getValueCursor(); List outputs = cursor.getOutputs(); ValueCursor promoSelVals = (ValueCursor) outputs.get(0); ValueCursor chanSelVals = (ValueCursor) outputs.get(1); ValueCursor timeSelVals = (ValueCursor) outputs.get(2); ValueCursor custSelVals = (ValueCursor) outputs.get(3); ValueCursor prodSelVals = (ValueCursor) outputs.get(4); // Set the position of the root CompoundCursor cursor.setPosition(15); /* * Get the values at the current position and determine the span * of the values of the time and product outputs. */ output.print(promoSelVals.getCurrentValue() + ", "); output.print(chanSelVals.getCurrentValue() + ", "); output.print(timeSelVals.getCurrentValue() + ", "); output.print(custSelVals.getCurrentValue() + ", "); output.print(prodSelVals.getCurrentValue() + ", "); output.println(baseValCursor.getCurrentValue()); // Determine the span of the values of the two fastest varying outputs int span; span = (prodSelVals.getParentEnd() - prodSelVals.getParentStart()) -1); output.println("The span of " + prodSelVals.getCurrentValue() + " at the current position is " + span + ".") span = (timeSelVals.getParentEnd() - timeSelVals.getParentStart()) -1); output.println("The span of " + timeSelVals.getCurrentValue() + " at the current position is " + span + ".") cursorMngr.close();
This example produces the following output.
Promotion total, Direct, 2000-Q1, Outerwear - Men, US, 9947221.50 The span of Outerwear - Men at the current position is 3. The span of 2000-Q2 at the current position is 12.
|
Copyright © 2000, 2002 Oracle Corporation. All Rights Reserved. |
|