Я пытаюсь добавить строку в ПРОСМОТР, но он не появляется в нем, но он появляется в ТАБЛИЦЕ, представление было создано из - PullRequest
0 голосов
/ 05 июня 2019

Предоставив таблицу сотрудников table1, мне пришлось создать просмотр списка сотрудников, которые занимали руководящие должности. Нет проблем. Тогда с этой точки зрения пришлось перечислить тех, кто принадлежал к 10 отделу. Никаких проблем. Но затем, все еще в том же виде, меня просят вставить нового продавца, принадлежащего к 20 отделу. При этом вновь созданная строка не отображается в представлении, но отображается в исходной таблице1. Я не понимаю почему. Вот мой код:

-- I create the view here

create view v_senior 
as
select *
from emp
where job like 'manager' or job like 'president';

--Here I filter by department 10

select *
from v_senior
where deptno = 10;


-- Here I try to add the new Salesman

insert into v_senior (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values(8888,'Luxian', 'SALESMAN', '5678', '2019-06-06', '100000', '500', 20)

И именно здесь, когда я пытаюсь получить все данные из v_senior, возвращаются только данные, это сотрудник на руководящей должности, никаких признаков моего недавно добавленного продавца. Но этот продавец появляется, когда я выбираю все данные из emp (исходная таблица). Если бы у меня было объяснение, пожалуйста, я чувствую себя потерянным, не зная, что пошло не так. Большое вам спасибо.

1 Ответ

0 голосов
/ 05 июня 2019

Ваше представление фильтрует новые данные из-за условия фильтра в представлении.

Поскольку это домашняя задача, я предполагаю, что инструктор, возможно, попросит вас вставить несоответствующую строку в таблицу EMP напрямую и заметить, что она не видна в представлении (для этого предназначены представления). Но вы нашли более интересный случай, вставив вместо этого представления, это поведение «исчезающей строки» - хорошо известное явление.

Вы можете легко предотвратить поведение "исчезающей строки":

create view v_senior
as
select *
from emp
where job like 'manager' or job like 'president'
with check option;

Бит с опцией проверки сообщает Oracle, что при проверке представления все изменения, которые вы вносите с помощью представления (INSERTS или UPDATES), по-прежнему видны. Эта функция существует, чтобы позволить вам предотвращать ситуации, с которыми вы сталкивались.

Это дополнительная функция, и если вы ее не включите, время от времени вы будете сталкиваться с проблемой «исчезающей строки».

С новым видом я сделал (слегка измененную) вставку:

insert into v_senior (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values(8888,'Luxian', 'SALESMAN', '5678', DATE'2019-06-06', '1000', '500', 20)

И получил эту ошибку:

ORA-01402: просмотр с опцией CHECK где нарушение условия

И это ожидается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...