首页 > 解决方案 > 为什么在我的视图/表格中看不到插入的数据

问题描述

首先,我创建了一个这样的表:

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;

在此之后,当我尝试将数据插入视图时,它说数据已插入,但我在视图中看不到任何数据。

标签: sqloracle

解决方案


我不知道你在做什么,但你做错了。

  • INSTEAD OF你写的触发器没有多大意义。它不是 INSERT,但您正在执行UPDATE
  • 此外,您正在更新视图,但您应该在(而不是视图)上进行;这就是为什么它被称为“而不是” - 而不是插入到视图中,您将插入到表中
  • DEPTT_DEMO1.DEPARTMENT_ID是主键列。这意味着它不能接受NULL
  • 触发器的WHERE条款说WHERE DEPARTMENT_ID IS NULL;它永远不是NULL,这是一个主键列

很快,您将不得不仔细考虑并正确执行。


推荐阅读