Kbase 20035: Oracle Error 932 Occurs After Applying Incremental .df
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  31/10/2008 |
|
Status: Verified
FACT(s) (Environment):
Progress 9.1B
Progress 9.1C
Oracle DataServer
SYMPTOM(s):
ORA-00932: inconsistent datatypes
The error is seen when running a program against a table altered by an incremental .df
CAUSE:
Bug# 20011130-004. Incremental causes wrong FOREIGN-POS
When you perform the migration process 'Progress to Oracle' (for example, protoora) and set the 4GL extended objects, the last column in the table is PROGRESS_RECID.
The schema holder holds an information called FOREIGN-POS that maps to the column position at the Oracle side. If you dump the table from the schema holder, you encounter something like the following on the field definition:
ADD FIELD "field_1 OF "table_1" AS character
DESCRIPTION "Test"
FORMAT "x(50)"
INITIAL ""
LABEL "field_1"
POSITION 7
COLUMN-LABEL "field_1"
ORDER 20
FOREIGN-POS 3 <---------The position over Oracle
FOREIGN-NAME "table_1"
FOREIGN-TYPE "CHAR"
FOREIGN-MAXIMUM 50
FIELD-MISC13 50
FIELD-MISC14 1
The tool to generate the incremental .df is not considering the last column as PROGRESS_RECID, and the incremental generates the new columns with inaccurate FOREIGN-POS values.
This will cause problems when running the application against this table.
FIX:
This issue has been fixed in Progress 9.1D and Progress 9.1CPATCH on OS
SUN SOLARIS INTEL 9.1C08
LINUX Intel 9.1C08
HP-UX 64-bit 9.1C09
HP/UX 11 9.1C09
IBM AIX 9.1C10
UNIX V.4 9.1C10
SUN SOLARIS 9.1C11
Compaq Tru64 UNIX 9.1C11
WIN NT 32 Intel 9.1C15
However, the workaround is to change the incremental .df created by the DataServer tool before loading it into the schema holder. Make sure that FOREIGN-POS has the correct position. If you have already loaded the incremental .df, you can dump all the schema holder definitions, find the tables changed by the incremental .df, and make sure that the FOREIGN-POS value is correct. If it is not correct, change it and load the whole .df into a new empty database.