You are on page 1of 9

Assertions and triggers 1

Assertions and triggers


Assertions and triggers 2
Constraints
Attribute-based CHECK constraints
create table (
postcode number(4) check (postcode > 0)
);
Checked at update to the table.
Tuple-based CHECK constraints
create table (

check (gender = 'M' or name = 'Mary')
);
Checked at update to the table.
Schema-level ASSERTIONS
Checked at any update to the tables in the assertion.
Not available in Oracle.
Assertions and triggers 3
Assertions
Syntax
create assertion name check (condition)
Has the ability to refer to all attributes in
the database.
Examples from Garcia-Molina
Fig. 7.6 + fig. 7.7, page 338
Example 7.14, page 339
Assertions and triggers 4
CHECK doesn't give guarantees,
339
CHECK conditions are checked when the
attribute / row is updates.
Condition is not checked if other data are
changed
CHECK conditions with sub-queries are not
guaranteed to hold
Examples
Fig. 7.7, page 338
Example, page 339
Assertions and triggers 5
Assertions vs. triggers
Assertions must be checked at any change to
the mentioned (in the assertion declaration)
relations.
That takes a lot of time!
Oracle doesn't implement assertions!!
Triggers are executed at certain events specified
by the database user
Not on every update.
That takes less time!!
Oracle implements triggers!!
Assertions and triggers 6
Triggers, syntax, 328
create trigger triggerName
Shah page 328
Event based execution
BEFORE the event (insert / update)
AFTER the event
INSTEAD OF the event (works on views only)
Assertions and triggers 7
BEFORE triggers, 330
Executed BEFORE the insert / update is
executed by the DBMS
Example:
changeNullTrigger.sql
Better solution: Default value on the column
Shah page 330
Hides the use of sequences (Oracle feature) from the
application
Inserts the current date
You can refer to the pseudo variable :NEW
Assertions and triggers 8
AFTER trigger, 331
Executed AFTER the insert / update is
executed by the DBMS
You can refer to the pseudo variables :NEW
and :OLD
Examples:
Shah fig. 14-16 + 14-17, page 332
Employee_adu_triggerAfter.sql
Used to
Check the certain conditions are still true after
the insert / update
Assertions and triggers 9
Instead-of triggers, 333
Not part of the SQL3 standard, but common i
commercial DBMS's
Ordinary triggers
Before / after the update
for updating base tables.
Instead-of triggers
executed instead of the update
for updating views
which would otherwise be non-updatable
Example Shah fig. 14-18, page 333 + 14-19, page 334
Full_employee_insteadOfTrigger.sql

You might also like