Disable Constraint:
When the constraint is in the disable state, although the constraint continues
to reside in the data dictionary, all the data get entered into the database
without being checked by the constraint.
Enable Constraint:
When the constraint is in the enable state, data is not entered into the
database unless it fulfills the condition of the constraint. This is the
default state of the constraint.
Validate Constraint: When the constraint is in the
validate state, the constraint ensures that the data entered conforms to the
constraint specifications.
Novalidate Constraint:
When the constraint is in the novalidate state, data entered hereafter will be
checked to conform to the constraint specifications. This means that data
entered earlier, which did not conform to the constraint might exist in the
table.
Combination of the constraint states:
- Enable, disable,
validate and novalidate are independent properties of the constraints and
various combinations of the above can be crated according to the
requirement.
- When the
constraint is enable validate, it is the same as enable and all
data present in the table must conform to the constraint specifications.
- When the
constraint is enable novalidate, existing rows may violate the
constraint but any new rows inserted or modified must conform to the
constraint specifications
- When the
constraint is disable validate, it ensures that all the data in the
table conforms to the constraint specifications. [While enabling the
constraint after a time period of disable, the data entered during the
disable period will be validated or checked].
- When the
constraint is disable novalidate, it is the same as disabled and
the data entered is not ruled by the constraint specifications. This
state is useful when large amount of data has to be loaded which has already
been validated and time is saved, as it need not be revalidated.
See the following situation,
The max_level column of the itemfile table is having the
check constraint as check(max_level<500). Now we drop the check
constraint using the drop command as follows.
Alter Table Itemfile Drop Constraint
Max;
Subsequently, we alter the table and apply the following
check constraint.
Alter Table Itemfile Add Constraint Max1 Check(Max_Level<400);
Now oracle will give an error check constraint
violated. This is because the table has data in that column following the
earlier constraint set. If we apply the new constraint as follows the
validations will only be for the future entries after the new constraint
application. The command is,
Alter Table Itemfile Add Constraint
Max1 Check(Max_Level<400) Novalidate;
The items already existing with the max_level between 400
and 500 will remain as it is. Only fresh data inserted will be validated
to conform to the constraint specifications.