| Hjem > Moderne databaseteknologi 2003 | |
|
Grunnleggende IT
Databaser
Moderne databasetekn.
Datakommunikasjon |
|
Eksempel: Å lage en trigger i C
Steg 1: Skriv en funksjon i C.
Steg 2: Kompiler koden som shared object. gcc -L/usr/lib/pgsql -I/usr/include/pgsql/server -lpq -shared -o sjekkrna.so sjekkrna.c Steg 3: Opprett tabellen, funksjonen og triggeren i psql
create table cFunkTest(
id int not null,
navn varchar(30),
regnr varchar(6),
alder int,
primary key(id));
create function sjekkrna() RETURNS TRIGGER AS
'/home/ansatte/elinkaan/moddb/sjekkrna.so' LANGUAGE C;
create trigger rnabefore BEFORE INSERT OR UPDATE ON cFunkTest
for each row execute procedure sjekkrna();
Steg 4: Legg inn testdata for å sjekke at alt er ok
insert into cFunkTest
values(1, 'Hans Nilsen', 'AA2345', -1);
ERROR: sjekkrna: alder=-1, kan ikke være negativ verdi
insert into cFunkTest
values(2, 'Per Olsen', 'AA1111', 25);
INSERT 4464450 1
insert into cFunkTest
values(3, 'Ole Jensen', 'bb2222', 31);
INSERT 4464451 1
insert into cFunkTest
values(4, 'Emma Evensen', 'AAA111', 18);
ERROR: sjekkrna: regnr=AAA111, feil format. Skal være CC####
insert into cFunkTest
values(5, 'Anne Andersen', 'PP2212', NULL);
INSERT 4464452 1
insert into cFunkTest
values(6, 'Hans Hansen', NULL, 34);
INSERT 4464453 1
select * from cFunkTest;
id | navn | regnr | alder
----+---------------+--------+-------
2 | Per Olsen | AA1111 | 25
3 | Ole Jensen | BB2222 | 31
5 | Anne Andersen | PP2212 |
6 | Hans Hansen | | 34
(4 rows)
update cFunkTest
set alder=-1
where id = 2;
ERROR: sjekkrna: alder=-1, kan ikke være negativ verdi
update cFunkTest
set alder=22
where id = 5;
UPDATE 1
select * from cFunkTest;
id | navn | regnr | alder
----+---------------+--------+-------
2 | Per Olsen | AA1111 | 25
3 | Ole Jensen | BB2222 | 31
6 | Hans Hansen | | 34
5 | Anne Andersen | PP2212 | 22
(4 rows)
update cFunkTest
set regnr='aa7654'
where id = 6;
UPDATE 1
update cFunkTest
set regnr='bb76b1'
where id = 2;
ERROR: sjekkrna: regnr=bb76b1, feil format. Skal være CC####
select * from cFunkTest;
id | navn | regnr | alder
----+---------------+--------+-------
2 | Per Olsen | AA1111 | 25
3 | Ole Jensen | BB2222 | 31
5 | Anne Andersen | PP2212 | 22
6 | Hans Hansen | AA7654 | 34
(4 rows)
|
|
| Hjem > Moderne databaseteknologi 2003 | |