2017-01-28 17 views
3

Я прочитал Oracle Language Reference и Там нет ничего об этой ситуации Так вот мы идем ...Возможно ли вставить новую строку в сложный вид, созданный из 2 таблиц?

Я закодирован сложный вид из 2-х таблиц:

CREATE OR REPLACE NOFORCE VIEW vw_emps_hist_50_b 
AS 
    SELECT employee_id, first_name, last_name, 
      job_id, department_id 
    FROM employees_history 
    WHERE department_id = 50 
    UNION 
    SELECT employee_id, TO_CHAR(NULL), TO_CHAR(NULL), 
      job_id, department_id 
    FROM employees_history_2 
    WHERE department_id = 50 
WITH CHECK OPTION; 

Теперь я пытаюсь для ввода новой строки с использованием вида:

INSERT INTO vw_emps_hist_50_b 
VALUES  (2005, 'Dexter', 'Morgan', 'ST_CLERK', 50); 

Error que empieza en la línea: 46 del comando - 
INSERT INTO vw_emps_hist_50_b 
VALUES  (2005, 'Dexter', 'Morgan', 'ST_CLERK', 50) 
Error en la línea de comandos : 46 Columna : 13 
Informe de error - 
Error SQL: ORA-01732: data manipulation operation not legal on this view 
01732. 00000 - "data manipulation operation not legal on this view" 
*Cause:  
*Action: 

Есть ли способ вставить эту строку в обе таблицы? или Могу ли я выбрать, какую таблицу я хочу вставить в эту новую строку?

+0

Необходимо использовать пункт «UNION» – Rattlesnake

+1

@GurV. , , Я предпочитаю 'cast (NULL как varchar2 (255))' или что-то в этом роде. Но он создает значение «NULL» с типом символьных данных. Да, 'NULL' может иметь тип. (Мне периодически напоминают об этом, когда я пытаюсь создать таблицу, используя запрос, который имеет только «NULL» в столбце.) –

ответ

2

Нет и да. Вы не можете вставить прямо в представление; это слишком сложно. Вместо этого вы можете создать триггер «вместо» на самом представлении.

То есть вы можете указать, что делать, когда представление обновляется. Одно место для начала - Oracle documentation на эту тему.

+0

Мой бог Вы гений !!! Я читал об этом вместо триггера 3 или 4 месяца назад, но я не помню этот вариант! Я снова прочитаю триггеры. Большое спасибо за вашу помощь. За последние 8 минут я помету ваш ответ – Rattlesnake

1

Выполненная операция, нарушающая политику, поскольку представление получено из более чем одной таблицы, и вы пытаетесь вставить операцию в этом представлении.