【发布时间】:2021-04-18 02:12:54
【问题描述】:
我创建了一个 SQL 视图来检索我想要的结果集,但是当我尝试添加一组新值时它失败了。在网上搜索时,似乎 VIEW 有一些限制,并且可能不允许某些类型的连接,我尝试用几种不同的方式创建视图,但还没有成功,有没有人碰巧知道我可以使用的方法重写这个允许我在其中插入新值的创建视图查询?
观点:
CREATE VIEW NATIONAL_ITEMS
AS
SELECT item.itemno, item.itemdesc, item.itemprice
FROM item
FULL OUTER JOIN invoiceitem ON item.itemno = invoiceitem.itemno
WHERE item.itemdesc LIKE '%National%'
AND invoiceitem.invoiceno IS NULL
WITH CHECK OPTION;
我的插入语句不起作用:
INSERT INTO NATIONAL_ITEMS
VALUES ('123-456', 'National TV', 100);
我收到此错误:
从第 1 行开始的错误命令 -
插入 NATIONAL_ITEMS 值('123-456'、'National TV'、100)
命令行错误:1 列:1
错误报告 -
SQL 错误:ORA-01733:此处不允许使用虚拟列
01733. 00000 - “此处不允许使用虚拟列”
任何帮助将不胜感激,谢谢。
【问题讨论】:
-
您可以简单地插入基表或在视图上创建一个
INSTEAD OF触发器,当您插入视图时,它会整理并为您执行此操作。 -
视图定义中使用的列之一是虚拟列吗?
-
您的视图与驾驶台没有 1:1 的关系。您不能对其进行 INSERT、UPDATE 或 DELETE。
-
您的查询没有多大意义。你正在做一个
full outer join,但是你在item.itemdesc上有一个谓词,这使它有效地成为left outer join。执行insert后,您希望在invoiceitem中显示哪些数据?