You are on page 1of 3

A)

1)
CREATE ASSERION MIN_SALARY
CHECK(
NOT EXISTS(
SELECT * FROM EMP
WHERE salary<1000
));
2)
CREATE TRIGGER MANAGER_MUST
AFTER INSERT ON Dept
REFERRING NEWROW AS NEWTUPLE
FOR EACH ROW
WHEN(NEWTUPLE.managerid NOT IN
(SELECT eid FROM Emp))
INSERT INTO Emp(eid)
VALUES(NEWTUPLE.managerid);
3)
CREATE ASSERTION PER_TIME_CON
CHECK(
NOT EXISTS(
SELECT * FROM Emp
Group By eid
Having SUM(pct_time)>100
));
4)
CREATE ASSERTION MangerMakesMore
CHECK (NOT EXISTS
(SELECT *
FROM Emp AS e, Works AS w, Dept AS d
WHERE e.eid = w.eid AND
w.did = d.did AND
e.salary > (SELECT salary
FROM Emp AS manager
WHERE d.managerid = manager.eid)));
5)
CREATE TRIGGER ManSalEqEmp
AFTER UPDATE OF salary ON Emp
REFERENCING
OLD ROW AS OldTuple,
NEW ROW AS NewTuple
FOR EACH ROW
WHEN (NewTuple.salary > OldTuple.salary)
UPDATE Emp
SET salary = NewTuple.salary
WHERE eid IN
(SELECT man.eid
FROM Emp AS man, Works AS w, Dept AS d
WHERE NewTuple.eid = w.eid
AND w.did = d.did
AND d.managerid = man.eid
AND man.salary < NewTuple.salary);
6)
CREATE TRIGGER ManSalEqEmpAndRaiseBudget

AFTER UPDATE OF salary ON Emp


REFERENCING
OLD ROW AS OldTuple,
NEW ROW AS NewTuple
FOR EACH ROW
WHEN (NewTuple.salary > OldTuple.salary)
BEGIN
UPDATE Dept
SET budget = 1 + (SELECT Sum(salary)
FROM (SELECT DISTINT e.eid, salary
FROM Emp AS e, Works AS w
WHERE NewTuple.eid = w.eid
AND w.eid = e.eid));
END
B)
a)
CREATE TRIGGER INCREMENT_EMP
AFTER INSERT ON EMPLOYEE
FOR EACH ROW
UPDATE COMPANY_STATS SET NBEMP=NBEMP+1;
b)
CREATE TRIGGER INCREMENT_EMP
AFTER DELETE ON EMPLOYEE
FOR EACH ROW
UPDATE COMPANY_STATS SET NBEMP=NBEMP-1;
c)Salary Coloumn is not there in EMPLOYEE table.
C)
Trigger Definition to set the status:
CREATE TRIGGER STOCK_STATUS
NO CASCADE BEFORE UPDATE OF QUOTE ON CURRENTQUOTE
REFERENCING NEW AS NEWQUOTE OLD AS OLDQUOTE
FOR EACH ROW
BEGIN ATOMIC
SET NEWQUOTE.STATUS =
CASE
WHEN NEWQUOTE.QUOTE >
(SELECT MAX(QUOTE) FROM QUOTEHISTORY
WHERE SYMBOL = NEWQUOTE.SYMBOL
AND YEAR(QUOTE_TIMESTAMP) = YEAR(CURRENT DATE) )
THEN 'High'
WHEN NEWQUOTE.QUOTE <
(SELECT MIN(QUOTE) FROM QUOTEHISTORY
WHERE SYMBOL = NEWQUOTE.SYMBOL
AND YEAR(QUOTE_TIMESTAMP) = YEAR(CURRENT DATE) )
THEN 'Low'
WHEN NEWQUOTE.QUOTE > OLDQUOTE.QUOTE
THEN 'Rising'
WHEN NEWQUOTE.QUOTE < OLDQUOTE.QUOTE
THEN 'Dropping'
WHEN NEWQUOTE.QUOTE = OLDQUOTE.QUOTE
THEN 'Steady'
END;
END
Trigger Definition to record change in QUOTEHISTORY table:

CREATE TRIGGER RECORD_HISTORY


AFTER UPDATE OF QUOTE ON CURRENTQUOTE
REFERENCING NEW AS NEWQUOTE
FOR EACH ROW
BEGIN ATOMIC
INSERT INTO QUOTEHISTORY
VALUES (NEWQUOTE.SYMBOL, NEWQUOTE.QUOTE, CURRENT TIMESTAMP);
END
D)
CREATE TRIGGER trig1
AFTER INSERT ON T4
REFERENCING NEW AS newRow
FOR EACH ROW
WHEN (newRow.a <= 10)
BEGIN
INSERT INTO T5 VALUES(:newRow.b, :newRow.a);
END

You might also like