Constraints

Constraint naming syntax

Both Informix® and ORACLE support primary key, unique, foreign key, default and check constraints, but the constraint naming syntax is different: ORACLE expects the "CONSTRAINT" keyword before the constraint specification and Informix expects it after.

UNIQUE constraint example

Table 1. UNIQUE constraint example (Informix vs ORACLE)
Informix ORACLE
CREATE TABLE emp (
  ...
  emp_code CHAR(10) UNIQUE
  CONSTRAINT pk_emp, 
CREATE TABLE emp (
   ... 
   emp_code CHAR(10) 
   CONSTRAINT pk_emp UNIQUE, 
   ... 

Primary keys

Like Informix, ORACLE creates an index to enforce PRIMARY KEY constraints (some RDBMS do not create indexes for constraints). Using "CREATE UNIQUE INDEX" to define unique constraints is obsolete (use primary keys or a secondary key instead).

Unique constraints

Like Informix, ORACLE creates an index to enforce UNIQUE constraints (some RDBMS do not create indexes for constraints).

When using a unique constraint, Informix allows only one row with a NULL value, while ORACLE allows several rows with NULL! Using CREATE UNIQUE INDEX is obsolete.

Foreign keys

Both Informix and ORACLE support the ON DELETE CASCADE option. To defer constraint checking, Informix provides the SET CONSTRAINT command while ORACLE provides the ENABLE and DISABLE clauses.

Check constraints

The check condition may be any valid expression that can be evaluated to TRUE or FALSE, including functions and literals. You must verify that the expression is not Informix specific.

Null constraints

Informix and ORACLE support not null constraints, but Informix does not allow you to give a name to "NOT NULL" constraints.

Solution

Constraint naming syntax

The database interface does not convert constraint naming expressions when creating tables from BDL programs. Review the database creation scripts to adapt the constraint naming clauses for ORACLE.