Script: to create the tables: Manas 14pc -postgreSQL Entrise DB
dept /emp /joblist
-- Table: public.dept
-- DROP TABLE public.dept;
CREATE TABLE public.dept
(
deptno numeric(2,0) NOT NULL,
dname character varying(14),
loc character varying(13),
CONSTRAINT dept_pk PRIMARY KEY (deptno),
CONSTRAINT dept_dname_uq UNIQUE (dname)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.dept
OWNER TO enterprisedb;
GRANT ALL ON TABLE public.dept TO enterprisedb;
GRANT ALL ON TABLE public.dept TO public;
-- Table: public.emp
-- DROP TABLE public.emp;
CREATE TABLE public.emp
(
empno numeric(4,0) NOT NULL,
ename character varying(10),
job character varying(9),
mgr numeric(4,0),
hiredate timestamp without time zone,
sal numeric(7,2),
comm numeric(7,2),
deptno numeric(2,0),
CONSTRAINT emp_pk PRIMARY KEY (empno),
CONSTRAINT emp_ref_dept_fk FOREIGN KEY (deptno)
REFERENCES public.dept (deptno) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT emp_sal_ck CHECK (sal > 0::numeric)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.emp
OWNER TO enterprisedb;
GRANT ALL ON TABLE public.emp TO enterprisedb;
GRANT ALL ON TABLE public.emp TO public;
-- Trigger: emp_sal_trig on public.emp
-- DROP TRIGGER emp_sal_trig ON public.emp;
CREATE OR REPLACE TRIGGER emp_sal_trig
BEFORE INSERT OR UPDATE OR DELETE
ON public.emp
FOR EACH ROW
DECLARE
sal_diff NUMBER;
BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE('Inserting employee ' || :NEW.empno);
DBMS_OUTPUT.PUT_LINE('..New salary: ' || :NEW.sal);
END IF;
IF UPDATING THEN
sal_diff := :NEW.sal - :OLD.sal;
DBMS_OUTPUT.PUT_LINE('Updating employee ' || :OLD.empno);
DBMS_OUTPUT.PUT_LINE('..Old salary: ' || :OLD.sal);
DBMS_OUTPUT.PUT_LINE('..New salary: ' || :NEW.sal);
DBMS_OUTPUT.PUT_LINE('..Raise : ' || sal_diff);
END IF;
IF DELETING THEN
DBMS_OUTPUT.PUT_LINE('Deleting employee ' || :OLD.empno);
DBMS_OUTPUT.PUT_LINE('..Old salary: ' || :OLD.sal);
END IF;
END;
-- Trigger: user_audit_trig on public.emp
-- DROP TRIGGER user_audit_trig ON public.emp;
CREATE OR REPLACE TRIGGER user_audit_trig
AFTER INSERT OR UPDATE OR DELETE
ON public.emp
FOR EACH STATEMENT
DECLARE
v_action VARCHAR2(24);
BEGIN
IF INSERTING THEN
v_action := ' added employee(s) on ';
ELSIF UPDATING THEN
v_action := ' updated employee(s) on ';
ELSIF DELETING THEN
v_action := ' deleted employee(s) on ';
END IF;
DBMS_OUTPUT.PUT_LINE('User ' || USER || v_action ||
TO_CHAR(SYSDATE,'YYYY-MM-DD'));
END;
-- Table: public.jobhist
-- DROP TABLE public.jobhist;
CREATE TABLE public.jobhist
(
empno numeric(4,0) NOT NULL,
startdate timestamp without time zone NOT NULL,
enddate timestamp without time zone,
job character varying(9),
sal numeric(7,2),
comm numeric(7,2),
deptno numeric(2,0),
chgdesc character varying(80),
CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate),
CONSTRAINT jobhist_ref_dept_fk FOREIGN KEY (deptno)
REFERENCES public.dept (deptno) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE SET NULL,
CONSTRAINT jobhist_ref_emp_fk FOREIGN KEY (empno)
REFERENCES public.emp (empno) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE CASCADE,
CONSTRAINT jobhist_date_chk CHECK (startdate <= enddate)
)
WITH (
OIDS=FALSE
);
ALTER TABLE public.jobhist
OWNER TO enterprisedb;
GRANT ALL ON TABLE public.jobhist TO enterprisedb;
GRANT ALL ON TABLE public.jobhist TO public;
|
Views :
Script:
-- View: public.salesemp
-- DROP VIEW public.salesemp;
CREATE OR REPLACE VIEW public.salesemp AS
SELECT emp.empno, emp.ename, emp.hiredate, emp.sal, emp.comm
FROM emp
WHERE emp.job::text = 'SALESMAN'::text;
ALTER TABLE public.salesemp
OWNER TO enterprisedb;
GRANT ALL ON TABLE public.salesemp TO enterprisedb;
GRANT ALL ON TABLE public.salesemp TO public;
-- Rule: salesemp_d ON public.salesemp
-- DROP RULE salesemp_d ON public.salesemp;
CREATE OR REPLACE RULE salesemp_d AS
ON DELETE TO salesemp DO INSTEAD DELETE FROM emp
WHERE emp.empno = old.empno;
-- Rule: salesemp_i ON public.salesemp
-- DROP RULE salesemp_i ON public.salesemp;
CREATE OR REPLACE RULE salesemp_i AS
ON INSERT TO salesemp DO INSTEAD INSERT INTO emp (empno, ename, job,
mgr, hiredate, sal, comm, deptno)
VALUES (new.empno, new.ename, 'SALESMAN'::character varying, 7698,
new.hiredate, new.sal, new.comm, 30);
-- Rule: salesemp_u ON public.salesemp
-- DROP RULE salesemp_u ON public.salesemp;
CREATE OR REPLACE RULE salesemp_u AS
ON UPDATE TO salesemp DO INSTEAD UPDATE emp SET empno = new.empno,
ename = new.ename, hiredate = new.hiredate, sal = new.sal, comm =
new.comm
WHERE emp.empno = old.empno;
|