When a DataServer application is presented to a non-matching schema holder, the application partner can avoid the recompilation of r-code despite the schema inconsistencies. This is particularly important when the application partner or an independent software vendor (ISV) ships r-code instead of the source code (.p file(s)).

You can run the r-code without recompilation against the non-compliant schema if you add a new field or modify a certain field attribute of an existing field in the database provided the modification does not change the OpenEdge data type, or the number of extents of a field is being referenced by the r-code.

Internally, the DataServer schema holder stores the table CRC value for each user table loaded into the schema holder. This CRC value is the currency/signature for that particular table and is compared against the CRC value stored in the r-code if that particular table (the signature at the time of compile) is referenced by the r-code. Any mismatch between the two values is reported as CRC mismatch error.

Normally, this problem is corrected by recompiling r-code for the application against the schema holder that had been modified since the last r-code compilation. This is the best way to both avoid CRC failure and ensure that there will be no inconsistencies in the CRC values or application behavior due to inconsistencies. However, it is now possible to run r-code against a schema holder logical database that has been updated with the following server change:
  • Adding a new field: New fields added in the Oracle DataServer get a higher field number than the existing fields. This avoids position conflicts with any existing fields in the table. Existing fields will retain the rpos and will never change once assigned an rpos. If a field is deleted, the rpos of that field will not be reused.
    Note: If a new field is added from a .df file in the same position attribute as that of the deleted field rpos, then the rpos can be reused by the new field.
  • Changing the precision of a character column: Reducing the precision of a CHARACTER data type is possible without requiring a recompile. However, this will cause a string data right truncation OCI error if the r-code tries to insert a value larger than the precision of the new column. Reducing the precision does not cause an error for read only operations because the client code does not use precision from the r-code while retrieving records.