Почему я не вижу вставленные данные в моем представлении / таблицах - PullRequest
0 голосов
/ 24 января 2020

Сначала я создал таблицу следующим образом:

CREATE TABLE "DEPTT_DEMO1" 
(   
    "DEPARTMENT_ID" NUMBER(4,0), 
    "DEPARTMENT_NAME" VARCHAR2(30 BYTE) CONSTRAINT "DEPT_NAME_NN1" NOT NULL ENABLE, 
    "MANAGER_ID" NUMBER(6,0), 
    "LOCATION_ID" NUMBER(4,0),
    CONSTRAINT "DEPT_ID_PK1" PRIMARY KEY ("DEPARTMENT_ID")
);

После того, как таблица создана, я вставил несколько строк данных, а затем создал представление следующим образом:

CREATE OR REPLACE VIEW dept_demo_vw1 
AS
     SELECT DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID 
     FROM DEPTT_DEMO1;

Я также создаю триггер:

CREATE OR REPLACE TRIGGER vw_dept_tri 
INSTEAD OF INSERT ON dept_demo_vw1
--declare
BEGIN
    UPDATE dept_demo_vw1 
    SET DEPARTMENT_ID = dept_id.nextval 
    WHERE DEPARTMENT_ID IS NULL;
END vw_dept_tri;

После этого, когда я пытаюсь вставить данные в представление, он говорит, что данные вставлены, но я не вижу никаких данных в моем представлении.

1 Ответ

4 голосов
/ 24 января 2020

Я не знаю, что вы делаете, но вы делаете это неправильно.

  • INSTEAD OF триггер, который вы написали, не имеет особого смысла. Это вместо INSERT, но вы выполняете UPDATE
  • Более того, вы обновляете представление , но вы должны были делать это на таблица (не вид); поэтому он называется «вместо» - вместо вставки в представление вы будете вставлять в таблицу
  • DEPTT_DEMO1.DEPARTMENT_ID - столбец первичного ключа. Это означает, что он не может принять NULL значения
  • В предложении триггера WHERE указано WHERE DEPARTMENT_ID IS NULL; это никогда NULL, это столбец первичного ключа

Вскоре вам придется подумать и сделать это правильно.

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