assertions and triggers1. 2 constraints attribute-based check constraints create table … (...

9
Assertions and triggers 1 Assertions and triggers

Upload: roger-wilcox

Post on 18-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

Assertions and triggers 1

Assertions and triggers

Page 2: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

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 constraintscreate 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.

Page 3: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

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

Page 4: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

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

Page 5: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

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!!

Page 6: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

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)

Page 7: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

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

Page 8: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at update

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

Page 9: Assertions and triggers1. 2 Constraints Attribute-based CHECK constraints create table … ( postcode number(4) check (postcode > 0) ); Checked at 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