BOOLEAN data type
Informix®
Informix supports the BOOLEAN data type, which can store 't' or 'f'
values.
BOOLEAN data type in a different way: A
BOOLEAN variable stores integer values 1 or 0
(for TRUE or FALSE). This type is designed to hold the result of a
boolean expression.ORACLE
Oracle 23c supports a native BOOLEAN type in the SQL language. Older Oracle
versions like 21c only support a BOOLEAN type in the PL/SQL language.
Note that '1' and '0' char constants are casted by Oracle SQL as BOOLEAN
TRUE/FALSE equivalents.
Solution
dbmora_18 + Oracle client 18c, 19c, 21c or dbmora_23
+ Oracle client 23c with an Oracle server version prior to 23c (without SQL BOOLEAN
support), the ODI driver will always use CHAR(1) to store FGL
BOOLEAN values. The BOOLEAN/CHAR(1) type name conversion in DDL
statements can be disabled with the following FGLPROFILE
entry:dbi.database.dsname.ifxemul.datatype.boolean = falseHowever,
SQL parameter and SQL fetch buffers can still be FGL BOOLEAN variables: These are
mapped to '1' and '0' values for CHAR(1) columns.dbmora_23 + Oracle client 23c with an Oracle 23c server (and future
versions), the ODI driver will by default use the native Oracle SQL BOOLEAN type
for FGL BOOLEAN. To get the former behavior BOOLEAN/CHAR(1)
conversion, use the following FGLPROFILE
entry:dbi.database.dsname.ora.boolean.aschar = trueIn this
case, the dbi.database.dsname.ifxemul and
dbi.database.dsname.ifxemul.datatype.boolean settings must be
left unset or set to true, to create CHAR(1) columns for
BOOLEAN in DDL statements. If the Informix emulation settings for boolean is
disabled, the use of BOOLEAN type in DDL statements will be accepted by Oracle 23c.
However, the ODI driver will use CHAR(1) for SQL Parameter and fetch buffer
bindings, and '1'/'0' values.The BOOLEAN/CHAR(1) conversion rule applies to all SQL tables for a given SQL
connection. If you have existing boolean data in several tables using CHAR(1)
columns, you need to plan for an upgrade process in order to use the new native SQL
BOOLEAN type of Oracle.
Note that the combination of dbmora_18 + Oracle client 18c and Oracle server 23c
is possible, but is not supported by Genero: To connect to Oracler 23c server, use
dbmora_23 + Oracle client 23c.
When using the BOOLEAN as CHAR(1) emulation, the
CONSTRUCT dialog will produce '1' and '0' constants for BOOLEAN
fields. When using the native Oracle 23c SQL BOOLEAN type,
CONSTRUCT will produce SQL conditions using TRUE and
FALSE constants.
To extract database schemas, the fgldbsch tool will do the following:
-
When connecting to an Oracle server of a version prior to 23c, no
BOOLEANtype is possible in SQL tables, andCHAR(1)will be seen asCHAR(1)in the resulting .sch file. -
When connecting to an Oracle 23c server (and future versions),
BOOLEANSQL typed columns will be extracted as FGLBOOLEANtype (45) by default, or as FGLCHAR(1)when using conversion option B. Here option B make only sense for legacy code where boolean values are handled with FGLCHAR(1)variables, assuming '1'/'0' values.
BOOLEAN type translation can be controlled with the
following FGLPROFILE
entry:dbi.database.dsname.ifxemul.datatype.boolean = { true | false }For
more details see IBM Informix emulation parameters in FGLPROFILE.