Sql 在oracle视图上创建插入触发器

Sql 在oracle视图上创建插入触发器,sql,oracle,Sql,Oracle,我正在为我的简单论坛项目工作。对于存储数据,我将数据库模式设置为: 为了更方便地查看用户发布的问题,我创建了一个如下视图: create view users_questions as select qid,username,questions from userinfo natural join posts natural join questions 我试图在该视图上创建一个触发器来插入实际插入的数据 把问题放到桌子上,然后贴出来。我有制作触发器的基本知识 对于表[了解删除时备份表行的触

我正在为我的简单论坛项目工作。对于存储数据,我将数据库模式设置为:

为了更方便地查看用户发布的问题,我创建了一个如下视图:

create view users_questions as select qid,username,questions from userinfo natural
join posts natural join questions
我试图在该视图上创建一个触发器来插入实际插入的数据 把问题放到桌子上,然后贴出来。我有制作触发器的基本知识 对于表[了解删除时备份表行的触发器]。但在视图的情况下会感到困惑,在视图的情况下是否可以使用instead触发器将数据插入到其他表中

使用我创建触发器的尝试进行编辑

不工作会显示如下错误:

错误(4,5):PL/SQL:SQL语句忽略错误(4,46):PL/SQL:
ORA-00984:此处不允许使用列

你需要:

insert into questions values(:new.qid, :new.questions);

NEW

前面的冒号您的问题是什么?如果可能的话?是的,建议是这样的。如何获取用户试图插入的值?请注意,使用触发器时,您正在脖子上套一根绳子。Oracle建议不要使用触发器实现业务逻辑。很抱歉,为了理解触发器的用途,不关心Oracle问题。但是谢谢你的好意@Ychdziu。不会在实际项目中使用。编码建议-不要使用
自然连接
,因为这会使确定连接条件非常困难。始终明确说明连接条件,以便每个人都能看到它们。并且在
INSERT
语句中始终包含一个字段列表-这样,在修改表后,
INSERT
s将仍然有效,或者您将能够轻松找到需要更新的语句。祝您好运。或者将
使用NEW AS NEW、OLD AS OLD添加到触发器定义中。
insert into questions values(:new.qid, :new.questions);