ROWID columns
Informix®
When creating a table, Informix automatically adds a
ROWID
integer column (applies to non-fragmented tables only).
The ROWID
column is auto-filled with a unique number and can be used like a
primary key to access a given row.
Informix ROWID
usage was a
common practice in the early days of Informix
4GL programming. Today it is recommended to define all your database tables with a
PRIMARY KEY
to uniquely identify rows.
With Informix, the sqlca.sqlerrd[6]
register contains the ROWID
of the last row affected by an INSERT
,
UPDATE
or DELETE
statement.
Dameng®
Dameng support ROWID
column, but the data type is different from Informix ROWIDs: Dameng rowids are
CHAR(18)
.
AAAA8mAALAAAAQkAAA
Dameng rowids represent the physical addresses of the row, and cannot be used as permanent row
identifiers: After a DELETE
, an INSERT
statement might reuse the
physical place of the deleted row, to store the new row. However, rowids can be used in the context
of a transaction.
For example:
Solution
If your Genero BDL
application uses rowid columns, review the program logic to use primary keys insead. If the database
table does no define a primary key, it should be added. All references to
SQLCA.SQLERRD[6]
must be removed, because this variable will not hold the
ROWID
of the last modified row.
ROWID
values must be
changed to CHAR(18)
.Informix INTEGER
rowids fit in a
CHAR(18)
variable. If you adapt the code to use CHAR(18)
rowids,
the code will still work with Informix database.
When connected to a Dameng database, all references to sqlca.sqlerrd[6]
must be
reviewed, because this register can not contain the rowid of the last affected row.
ROWID
", the translation can be controlled
with the following FGLPROFILE
entry:dbi.database.dsname.ifxemul.rowid = {
true |
false }
For more details see IBM Informix emulation parameters in FGLPROFILE.