sql - 为什么在我的视图/表格中看不到插入的数据
问题描述
首先,我创建了一个这样的表:
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;
在此之后,当我尝试将数据插入视图时,它说数据已插入,但我在视图中看不到任何数据。
解决方案
我不知道你在做什么,但你做错了。
INSTEAD OF
你写的触发器没有多大意义。它不是INSERT
,但您正在执行UPDATE
- 此外,您正在更新视图,但您应该在表(而不是视图)上进行;这就是为什么它被称为“而不是” - 而不是插入到视图中,您将插入到表中
DEPTT_DEMO1.DEPARTMENT_ID
是主键列。这意味着它不能接受NULL
值- 触发器的
WHERE
条款说WHERE DEPARTMENT_ID IS NULL
;它永远不是NULL,这是一个主键列
很快,您将不得不仔细考虑并正确执行。
推荐阅读
- javascript - 图像未在 Firebase 存储中保存为 jpeg
- nginx - Nignx rtmp 模块 m3u8 文件未生成
- android - Koin 测试 declareMock 不适用于倍数声明
- php - Laravel 5.6 类 xmlrpcmsg 未找到
- python-3.x - 使用 Python 等待元素中的文本成为 Selenium 中的数字
- android - RecyclerView 填充了太多数据
- javascript - 如何修复 Vuex 中未知突变类型的错误?
- node.js - aes-128-cbc 的未知密码
- debugging - 在 Salesforce 中批量删除调试日志
- jsrender - jsrender Format Decimal 在表格中显示 3 个位置