{"id":277601,"date":"2016-04-04T13:54:02","date_gmt":"2016-04-04T09:54:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=277601"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=277601","title":{"rendered":"\u0421\u043b\u043e\u0436\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 (constraint)"},"content":{"rendered":"<p>       \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u0432\u043e\u0434\u0438\u043c\u043e\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u0431\u043b\u0438\u0446 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0411\u0414 ORACLE.<a name=\"habracut\"><\/a> \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e DML \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e \u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0448\u0430\u0433\u0430\u0445 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u043c.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u043e\u043b\u0435\u0439: \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0430\u0442\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0434\u0430\u0442\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0432\u0435 \u0434\u0430\u0442\u044b \u2014 \u0434\u0430\u0442\u0443 \u043a\u043e\u043d\u0446\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0434\u0430\u0442\u0443 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0415\u0441\u043b\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u043c\u0435\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u043f\u0435\u0440\u0435\u0434 \u0438 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u043f\u0435\u0440\u0435\u0434 \u0434\u0430\u0442\u0443 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u2014 \u043e\u043d\u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430. \u041d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u0430\u0432\u0438\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u044b\u043b\u0438\u043b\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043d\u0430 400 \u0441\u0442\u0440\u043e\u043a \u0441 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043b\u0438\u043d\u043a\u0438 \u043a API \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043d\u0443\u0436\u0435\u043d \u0431\u044b\u043b \u0442\u0440\u0438\u0433\u0433\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044e COMMIT, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u0430\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0438. \u0422\u0430\u043a\u043e\u0439 \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u043d\u0430\u0448\u0435\u043b\u0441\u044f. <\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE TRIGGER &lt;mv_as&gt;   AFTER DELETE OR INSERT OR UPDATE  ON  MV <\/code><\/pre>\n<p>  \u0433\u0434\u0435 MV \u2014 \u044d\u0442\u043e:<\/p>\n<pre><code class=\"sql\">CREATE MATERIALIZED VIEW MV    REFRESH COMPLETE ON COMMIT    AS SELECT &lt;,,,,&gt; FROM &lt;tab&gt;; <\/code><\/pre>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"sql\">CREATE  TABLE EMP  (EMPNO NUMBER(4) NOT NULL,   ENAME VARCHAR2(10),   JOB VARCHAR2(9),   MGR NUMBER(4),   HIREDATE DATE,   SAL NUMBER(7,2),   COMM NUMBER(17,2),   DEPTNO NUMBER(2));  CREATE TABLE DEPT    (DEPTNO NUMBER(2) NOT NULL,    DNAME VARCHAR2(14),     LOC VARCHAR2(13));  insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK'); insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS'); insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO'); insert into DEPT (DEPTNO, DNAME, LOC) values (31, 'OPERATIONS', 'CHICAGO');  insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7369, 'SMITH', 'CLERK', 7902, TIMESTAMP '1980-12-17 00:00:00', 2800, null, 20); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7499, 'ALLEN', 'SALESMAN', 7698, TIMESTAMP '1981-02-20 00:00:00', 1600, 300, 31); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7521, 'WARD', 'SALESMAN', 7698, TIMESTAMP '1981-02-22 00:00:00', 1250, 500, 30); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7566, 'JONES', 'MANAGER', 7839, TIMESTAMP '1981-04-02 00:00:00', 2975, null, 20); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7650, 'MARTIN', 'SALESMAN', 7698, TIMESTAMP '1981-09-28 00:00:00', 1251, 1400, 30); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7698, 'BLAKE', 'MANAGER', 7839, TIMESTAMP '1981-05-01 00:00:00', 2850, null, 30); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7782, 'CLARK', 'MANAGER', 7839, TIMESTAMP '1981-06-09 00:00:00', 2450, null, 10); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7708, 'SCOTT', 'ANALYST', 7566, TIMESTAMP '1982-12-09 00:00:00', 3000, null, 20); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7639, 'KING', 'PRESIDENT', null, TIMESTAMP '1981-11-17 00:00:00', 5000, null, 10); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7844, 'TURNER', 'SALESMAN', 7698, TIMESTAMP '1981-09-10 00:00:00', 1500, 0, 30); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7876, 'ADAMS', 'CLERK', 7788, TIMESTAMP '1982-01-12 00:00:00', 1100, null, 20); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7900, 'JAMES', 'CLERK', 7698, TIMESTAMP '1981-12-03 00:00:00', 950, null, 31); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7902, 'FORD', 'ANALYST', 7566, TIMESTAMP '1981-12-03 00:00:00', 3000, null, 20); insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)    values (7934, 'MILLER', 'CLERK', 7782, TIMESTAMP '1982-01-23 00:00:00', 1300, null, 10);  alter table emp add constraint \u0435m\u0440_\u0440k primary key(empno);  alter table dept add constraint dept_pk primary key(deptno);  alter table emp add constraint emp_fk_dept foreign key (deptno) references dept; <\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0438\u043f\u0430 \u2014 \u00ab\u0421\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u00bb \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0438 \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0441 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c\u044e &#8216;CLERK&#8217; \u0432 \u043e\u0434\u043d\u043e\u043c \u0433\u043e\u0440\u043e\u0434\u0435 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 2\u0445.<\/p>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0431\u0438\u0437\u043d\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 commit-\u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u0434\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438: <\/p>\n<p>   \u2014 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u0430\u0432\u0438\u043b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b;<br \/>   \u2014 \u043d\u0430\u0431\u043e\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043f\u043e\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044e.<\/p>\n<p>  \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0430\u0432\u0438\u043b \u0431\u0438\u0437\u043d\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0438 \u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0431\u0435\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u043f\u043e \u0432\u0441\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c. \u042d\u0442\u043e \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439.<\/p>\n<pre><code class=\"sql\">create table emp_chk ( emp_no NUMBER,                             i NUMBER); alter table emp_chk  add constraint PK_emp_no primary key (emp_no); <\/code><\/pre>\n<p>  \u041d\u0430 \u0432\u0441\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0448\u0430\u0435\u043c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 emp_chk \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u043c. \u0417\u0430\u043a\u0430\u0437\u0447\u0438\u043a \u0431\u043e\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 ORACLE-9, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 (compound).<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u044d\u0439\u043d\u0442\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 var_chk.chk_on. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 (\u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443) \u043d\u043e \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0435\u0430\u043d\u0441\u043e\u0432 \u0411\u0414). \u041f\u043e\u043b\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 MERGE \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043e\u0434\u043d\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u043c. \u041f\u043e\u043b\u0435 emp_chk.i \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0442\u043e\u0439 \u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 MERGE \u0442.\u043a. \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c MERGE \u0431\u0435\u0437 \u0444\u0440\u0430\u0437\u044b WHEN MATCHED \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE TRIGGER emp_chk_ar   AFTER DELETE OR INSERT OR UPDATE   ON  emp   FOR EACH ROW BEGIN IF var_chk.chk_on != 1 THEN   RETURN; END IF;  MERGE INTO emp_chk a    USING (SELECT  nvl(:new.empno, :old.empno) AS emp_no                  , 1 AS i              FROM dual  ) b      ON (a.emp_no = b.emp_no)      WHEN NOT MATCHED THEN             INSERT (a.emp_no, a.i) VALUES (b.emp_no, b.i)      WHEN  MATCHED THEN  UPDATE          SET a.i = b.i; END emp_chk_ar;  CREATE OR REPLACE TRIGGER dept_chk_ar   AFTER DELETE OR INSERT OR UPDATE   ON  dept   FOR  EACH  ROW BEGIN IF var_chk.chk_on != 1 THEN   RETURN; END IF;  MERGE INTO emp_chk a    USING (            SELECT emp.empno AS emp_no , 1 AS i              FROM emp              WHERE emp.deptno = NVL(:new.deptno, :old.deptno)         ) b      ON (a.emp_no = b.emp_no)      WHEN NOT MATCHED THEN             INSERT (a.emp_no, a.i) VALUES (b.emp_no, b.i)      WHEN  MATCHED THEN  UPDATE           SET a.i = b.i; END dept_chk_ar; <\/code><\/pre>\n<p>  \u041e\u0447\u0438\u0441\u0442\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b emp_chk \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u043e\u0432\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 \u043f\u0430\u043a\u0435\u0442\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f var_chk.first_dml_in_commit:<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE TRIGGER emp_chk_bs   BEFORE DELETE OR INSERT OR UPDATE   ON  emp BEGIN IF var_chk.chk_on != 1 THEN   RETURN; END IF;  IF var_chk.first_dml_in_commit = 1 THEN      DELETE FROM emp_chk; END IF; var_chk.first_dml_in_commit := 0 ; END emp_chk_bs;  CREATE OR REPLACE TRIGGER dept_chk_bs   BEFORE DELETE OR INSERT OR UPDATE   ON  dept BEGIN IF var_chk.chk_on != 1 THEN   RETURN; END IF; IF var_chk.first_dml_in_commit = 1 THEN      DELETE FROM emp_chk; END IF; var_chk.first_dml_in_commit := 0; END dept_chk_bs; <\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c materialized view.<\/p>\n<pre><code class=\"sql\">CREATE MATERIALIZED VIEW chk_emp_mv   REFRESH COMPLETE ON COMMIT AS       SELECT emp_no,i FROM emp_chk; <\/code><\/pre>\n<p>  \u0422\u0440\u0438\u0433\u0433\u0435\u0440 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 var_chk.first_dml_in_commit \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 EMP_CHK \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE TRIGGER chk_emp_mv_bs   BEFORE DELETE OR INSERT OR UPDATE   ON  chk_emp_mv BEGIN IF var_chk.chk_on != 1 THEN   RETURN; END IF;   var_chk.first_dml_in_commit := 1 ; END chk_emp_mv_bs; <\/code><\/pre>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0440\u0438\u0433\u0433\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0449\u0438\u0439 \u0431\u0438\u0437\u043d\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c.<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE TRIGGER chk_emp_mv_as   AFTER DELETE OR INSERT OR UPDATE   ON  chk_emp_mv DECLARE v_result NUMBER; v_errtxt VARCHAR2(512); BEGIN IF var_chk.chk_on != 1 THEN   RETURN; END IF;  FOR cur IN (SELECT t.emp_no FROM CHK_EMP_MV t) LOOP SELECT XMLELEMENT(&quot;EMP&quot;, XMLAGG(XMLELEMENT(&quot;EMPNO&quot;,tb.empno,          XMLELEMENT(&quot;ENAME&quot;, tb.ename),          XMLELEMENT(&quot;JOB&quot;, tb.job),          XMLELEMENT(&quot;MGR&quot;, tb.mgr),          XMLELEMENT(&quot;SAL&quot;, tb.sal),          XMLELEMENT(&quot;DEPTNO&quot;, tb.DEPTNO),          XMLELEMENT(&quot;COMM&quot;, tb.comm),          XMLELEMENT(&quot;HIREDATE&quot;, TO_CHAR(tb.hiredate,'dd.mm.yyyy'))          ,(SELECT              XMLELEMENT(&quot;DEPT&quot;,                XMLAGG(XMLELEMENT(&quot;DEPTNO&quot;,d.deptno,                       XMLELEMENT(&quot;DNAME&quot;,d.dname),                       XMLELEMENT(&quot;LOC&quot;,d.loc)                         )))                FROM dept d WHERE d.deptno = tb.deptno          )   )) ).GETCLOBVAL() INTO var_chk.var_emp_val FROM   (      SELECT * FROM  EMP         WHERE emp.empno = cur.emp_no     ) tb GROUP BY empno,sal,mgr,job,hiredate,ename,deptno,comm ; -- \u0431\u0438\u0437\u043d\u0435\u0441 \u043b\u043e\u0433\u0438\u043a\u0430 v_result := emp_logic(cur.emp_no,v_errtxt); var_chk.write_log(v_result,v_errtxt); IF v_result = 1 THEN   RAISE_APPLICATION_ERROR (-20555,v_errtxt); END IF; END LOOP; END chk_emp_mv_as; <\/code><\/pre>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043a \u0442\u0435\u043a\u0441\u0442\u0443 CHK_EMP_MV_AS. \u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u044d\u0439\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0423\u0447\u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f commit-\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043b\u043e\u0433 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u043e \u0438 \u0432\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0448\u0435\u0433\u043e\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f commit-a \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0421\u043d\u0438\u043c\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0435 emp_chk_log.XML. \u041b\u043e\u0433 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 var_chk.write_log \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443:<\/p>\n<pre><code class=\"sql\">create table emp_chk_log    (     ts        DATE,      status        NUMBER,         XML        CLOB     ); <\/code><\/pre>\n<p>  \u0412\u0441\u0435 \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 emp_logic. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u043b\u0435\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0439\u043d\u0442\u0430 \u0438 \u0441\u043b\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0438\u0436\u0435 \u0442\u0435\u043a\u0441\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 var_chk.<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PACKAGE var_chk AS   first_dml_in_commit NUMBER;   var_emp_val CLOB;    FUNCTION chk_on  return NUMBER;   PROCEDURE write_log (p_status NUMBER                       ,p_err_txt VARCHAR2); END; <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE PACKAGE BODY var_chk AS -------------------- FUNCTION chk_on  RETURN NUMBER IS -- \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 1 - \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d --            0 - \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d            BEGIN   RETURN 1; END chk_on; --------------------- PROCEDURE write_log (p_status NUMBER                     ,p_err_txt VARCHAR2) is PRAGMA AUTONOMOUS_TRANSACTION; BEGIN  INSERT INTO emp_chk_log  (ts,status,xml,err_txt)   VALUES (sysdate,p_status,var_emp_val,SUBSTR(p_err_txt,1,512)); COMMIT; END write_log; --------------------- BEGIN   first_dml_in_commit :=1;   dbms_lob.createtemporary(var_emp_val,true); END; <\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u0430\u0432\u0438\u043b.<\/p>\n<pre><code class=\"sql\">CREATE OR REPLACE FUNCTION emp_logic                  (p_emp_no NUMBER                  ,p_errtxt OUT VARCHAR2 )  RETURN NUMBER IS  v_emp_count NUMBER;  v_emp_loc dept.loc%TYPE; BEGIN  SELECT dept.loc,COUNT(*) INTO v_emp_loc,v_emp_count FROM emp, dept,    (      SELECT emp.job, dept.loc         FROM emp, dept       WHERE emp.deptno = dept.deptno         AND emp.empno = p_emp_no         AND emp.job = 'CLERK' ) p WHERE emp.deptno = dept.deptno  AND p.loc=dept.loc   AND p.job=emp.job GROUP BY dept.loc ; IF v_emp_count &gt; 2  THEN p_errtxt:='\u041e\u0448\u0438\u0431\u043a\u0430:\u0412 \u0444\u0438\u043b\u0438\u0430\u043b\u0435 '||v_emp_loc||' \u0431\u043e\u043b\u044c\u0448\u0435 2\u0445 \u043a\u043b\u0435\u0440\u043a\u043e\u0432';        RETURN 1; END IF;  RETURN 0; END emp_logic; <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043d\u0430 \u0445\u043e\u0434\u0443.<\/p>\n<pre><code>SQL&gt; UPDATE EMP SET JOB='CLERK' WHERE  EMPNO=7708;  1 row updated.  SQL&gt; commit; commit * ERROR at line 1: ORA-12008: error in materialized view refresh path ORA-20555: \u041e\u0448\u0438\u0431\u043a\u0430:\u0412 \u0444\u0438\u043b\u0438\u0430\u043b\u0435 DALLAS \u0431\u043e\u043b\u044c\u0448\u0435 2\u0445 \u043a\u043b\u0435\u0440\u043a\u043e\u0432 ORA-06512: at &quot;ZH.CHK_EMP_MV_AS&quot;, line 43 ORA-04088: error during execution of trigger 'ZH.CHK_EMP_MV_AS'   SQL&gt; UPDATE EMP SET JOB='CLERK' WHERE  EMPNO=7369;      1 row updated.  SQL&gt; commit;  Commit complete.  SQL&gt; select ts,status,to_char(xml) from emp_chk_log;  TS\t\t    STATUS --------------- ---------- TO_CHAR(XML) -------------------------------------------------------------------------------- 30-MAR-16\t\t 1 &lt;EMP&gt;&lt;EMPNO&gt;7708&lt;ENAME&gt;SCOTT&lt;\/ENAME&gt;&lt;JOB&gt;CLERK&lt;\/JOB&gt;&lt;MGR&gt;7566&lt;\/MGR&gt;&lt;SAL&gt;3000&lt;\/SA L&gt;&lt;DEPTNO&gt;20&lt;\/DEPTNO&gt;&lt;COMM&gt;&lt;\/COMM&gt;&lt;HIREDATE&gt;09.12.1982&lt;\/HIREDATE&gt;&lt;DEPT&gt;&lt;DEPTNO&gt;2 0&lt;DNAME&gt;RESEARCH&lt;\/DNAME&gt;&lt;LOC&gt;DALLAS&lt;\/LOC&gt;&lt;\/DEPTNO&gt;&lt;\/DEPT&gt;&lt;\/EMPNO&gt;&lt;\/EMP&gt;  TS\t\t    STATUS --------------- ---------- TO_CHAR(XML) -------------------------------------------------------------------------------- 30-MAR-16\t\t 0 &lt;EMP&gt;&lt;EMPNO&gt;7369&lt;ENAME&gt;SMITH&lt;\/ENAME&gt;&lt;JOB&gt;CLERK&lt;\/JOB&gt;&lt;MGR&gt;7902&lt;\/MGR&gt;&lt;SAL&gt;2800&lt;\/SA L&gt;&lt;DEPTNO&gt;20&lt;\/DEPTNO&gt;&lt;COMM&gt;&lt;\/COMM&gt;&lt;HIREDATE&gt;17.12.1980&lt;\/HIREDATE&gt;&lt;DEPT&gt;&lt;DEPTNO&gt;2 0&lt;DNAME&gt;RESEARCH&lt;\/DNAME&gt;&lt;LOC&gt;DALLAS&lt;\/LOC&gt;&lt;\/DEPTNO&gt;&lt;\/DEPT&gt;&lt;\/EMPNO&gt;&lt;\/EMP&gt;   SQL&gt; <\/code><\/pre>\n<p>  \u0420\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0442\u0440\u0435\u0445 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0444\u0438\u0441\u0430 \u0438 \u0444\u0438\u043b\u0438\u0430\u043b\u043e\u0432 \u0441 \u0432\u0435\u0441\u043d\u044b 2015 \u0433\u043e\u0434\u0430.       <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/280834\/\"> https:\/\/habrahabr.ru\/post\/280834\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041e\u0434\u043d\u0430\u0436\u0434\u044b \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u0432\u043e\u0434\u0438\u043c\u043e\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u0431\u043b\u0438\u0446 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0411\u0414 ORACLE.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-277601","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=277601"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/277601\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=277601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=277601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=277601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}