-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrigger.sql
More file actions
105 lines (89 loc) · 2.26 KB
/
trigger.sql
File metadata and controls
105 lines (89 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
set search_path to mylinkedin_test;
CREATE or replace FUNCTION emp_check()
RETURNS trigger
LANGUAGE 'plpgsql'
AS $is_valid_emp$
declare
use_id integer;
enddate date;
startdate date;
pskill varchar(30);
uskill varchar(30);
CURS CURSOR is select skill_name from ((select skill_id from user_skill where user_id=new.user_id) as r1 natural join skill);
begin
SELECT NEW.end_date INTO enddate;
SELECT NEW.user_id INTO use_id;
SELECT NEW.start_date INTO startdate;
if (TG_OP = 'INSERT') then
if enddate is null then
update employment set end_date =startdate where user_id=use_id;
return new;
end if;
OPEN CURS;
SELECT NEW.primary_skill INTO uskill;
loop
FETCH CURS INTO pskill;
raise notice 't %',pskill;
EXIT WHEN NOT FOUND;
IF(uskill = pskill ) THEN
CLOSE CURS;
return new;
end if;
end loop;
close CURS;
return null;
end if;
END;
$is_valid_emp$;
CREATE TRIGGER is_valid_emp
BEFORE INSERT ON employment
FOR each row EXECUTE PROCEDURE
emp_check();
CREATE or replace FUNCTION chat_check()
RETURNS trigger
LANGUAGE 'plpgsql'
AS $is_valid_chat$
declare
usrid integer;
frdid integer;
begin
SELECT NEW.user_id INTO usrid;
SELECT NEW.friend_id INTO frdid;
if (TG_OP = 'INSERT') then
if frdid in (select friend_id from friends where user_id=usrid) then
return new;
else return null;
end if;
end if;
END;
$is_valid_chat$;
CREATE TRIGGER is_valid_chat
BEFORE INSERT ON chat
FOR EACH ROW EXECUTE PROCEDURE
chat_check();
CREATE FUNCTION age_check()
RETURNS trigger
LANGUAGE 'plpgsql'
AS $is_valid$
declare
currage integer;
bdate date;
regdate timestamp;
begin
SELECT NEW.birthday INTO bdate;
SELECT NEW.registration_time INTO regdate;
if (TG_OP = 'INSERT') then
currage = to_char(age(regdate,bdate),'YYYY');
raise notice 'n %', currage;
if currage >= 18 then
return new;
else return null;
end if;
end if;
END;
$is_valid$;
CREATE TRIGGER is_valid
BEFORE INSERT ON myuser
FOR EACH ROW EXECUTE PROCEDURE
age_check();
------------------------------------------------------------------------------