PROMPT Building demonstration tables for DESC utility. PROMPT DROP VIEW dept_v; DROP PACKAGE p_dept; DROP TABLE emp; DROP TABLE dept; CREATE TABLE dept ( deptno NUMBER(2) CONSTRAINT dept_pk PRIMARY KEY, dname VARCHAR2(14), loc VARCHAR2(13) ); CREATE TABLE emp ( empno NUMBER(4), ename VARCHAR2(10) CONSTRAINT emp_nn_ename NOT NULL, job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7, 2), comm NUMBER(7, 2), deptno NUMBER(2), CONSTRAINT emp_pk PRIMARY KEY (empno), CONSTRAINT emp_uk UNIQUE (ename, hiredate), -- just for example CONSTRAINT check_sal CHECK (sal >= 0), CONSTRAINT emp_fk_dept FOREIGN KEY (deptno) REFERENCES dept (deptno) ); CREATE INDEX i_emp_deptno ON emp (deptno); CREATE INDEX i_emp_mgr ON emp (mgr); CREATE INDEX i_emp_composite ON emp (job, mgr, ename); COMMENT ON TABLE emp IS 'Сотрудники'; COMMENT ON COLUMN emp.empno IS 'Табельный номер'; COMMENT ON COLUMN emp.ename IS 'ФИО сотрудника'; COMMENT ON COLUMN emp.job IS 'Должность'; COMMENT ON COLUMN emp.mgr IS 'Табельный номер начальника'; COMMENT ON COLUMN emp.hiredate IS 'Дата приема на работу'; COMMENT ON COLUMN emp.sal IS 'Оклад'; COMMENT ON COLUMN emp.comm IS 'Премия'; COMMENT ON COLUMN emp.deptno IS 'Номер отдела'; CREATE OR REPLACE TRIGGER trg_emp BEFORE INSERT OR UPDATE OR DELETE ON emp BEGIN -- Some checks here NULL; END; / CREATE OR REPLACE VIEW dept_v ( dname, total_emps ) AS SELECT d.dname, COUNT(e.deptno) AS total_emps FROM dept d, emp e WHERE d.deptno = e.deptno(+) GROUP BY d.dname / COMMENT ON TABLE dept_v IS 'Количество сотрудников в отделах'; COMMENT ON COLUMN dept_v.dname IS 'Название отдела'; COMMENT ON COLUMN dept_v.total_emps IS 'Количество сотрудников в отделе'; CREATE OR REPLACE PACKAGE p_dept IS PROCEDURE ins ( deptno_in dept.deptno%TYPE ,dname_in dept.dname%TYPE ,loc_in dept.loc%TYPE ); END p_dept; / CREATE OR REPLACE PACKAGE BODY p_dept IS PROCEDURE ins ( deptno_in dept.deptno%TYPE ,dname_in dept.dname%TYPE ,loc_in dept.loc%TYPE ) IS BEGIN INSERT INTO dept ( deptno, dname, loc ) VALUES ( deptno_in, dname_in, loc_in ); END ins; END p_dept; / ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-RR'; ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK'); INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS'); INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO'); INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON'); INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20); INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30); INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30); INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20); INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698, TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30); INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839, TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30); INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839, TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10); INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566, TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20); INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL, TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10); INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698, TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30); INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788, TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20); INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698, TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30); INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566, TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20); INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782, TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10); COMMIT;