Kbase 20826: Oracle DataServer: unique_id_0 and -zod
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  1/10/2007 |
|
Status: Unverified
GOAL:
An explanation of the changes to the DataServer ORACLE and the use of the unique_id_0.
FACT(s) (Environment):
Oracle DataServer
Progress 9.1B
FIX:
Beginning with Version 9.1A, the ORACLE DataServer adds the column that is used to support ROWID to any index that is not unique. This is needed to present a consistent ordering of the rows.
If the PROGRESS_RECID column is in that table, this is the unique_id_0 column. The following patch releases include a change in the DataServer ORACLE concerning the unique_id_0 usage:
Compaq Tru64 UNIX 9.1B08
HP-UX 64-bit 9.1B05
HP-UX 11 9.1B08
IBM AIX 9.1B12
Linux Intel 9.1B03
SUN Solaris 9.1B09
SUN Solaris Intel 9.1B07
UNIX V.4 9.1B03
Windows NT 32 Intel 9.1B11
There are two changes:
- If a 4GL BY clause is present, it controls the ORDER BY clause
in the SQL.
It does not include any columns not mentioned in the 4GL
BY clause. For example, a FOR EACH table BY NAME DESC (NAME
is an index non-unique), the ORDER BY clause does not
include unique_id_0.
- The compile-time session parameter -zod.
This prevents the DataServer client from adding unique_id_0 to the ORDER BY when the ordering is due to a USE-INDEX, or
when the index is chosen by the 4GL compiler.
This has the potential of producing unexpected results if
the value is not unique in the table. FOR FIRST and FOR LAST
might return different records on the following example:
FOR FIRST customer where NAME = "test".
END.
At compile-time, the following message appears when you use
the -zod parameter:
zod suppressed ORDER BY unique_id_0 may cause
inconsistent ordering