【发布时间】:2018-08-04 07:42:31
【问题描述】:
我正在开发我的简单论坛项目。为了存储数据,我的数据库架构为:
为了更方便地查看用户发布的问题,我创建了一个视图
create view users_questions as select qid,username,questions from userinfo natural
join posts natural join questions
我正在尝试在该视图上创建一个触发器以插入实际插入的数据 进入表格问题和帖子。我有创建触发器的基本知识 对于表[了解触发器以在删除时备份表行]。但是在视图的情况下感到困惑,天气相反的触发器可以在视图的情况下用于将数据插入到其他表中。
编辑我尝试创建触发器
CREATE OR REPLACE TRIGGER TRIGGER1
INSTEAD OF INSERT ON USERS_QUESTIONS
BEGIN
insert into questions values(new.qid,new.questions);
END;
不工作显示如下错误:
错误(4,5):PL/SQL:SQL 语句被忽略错误(4,46):PL/SQL:
ORA-00984: 此处不允许列
【问题讨论】:
-
您的问题是什么?如果这样的触发器是可能的?是的,documentation 暗示了这一点。
-
如何获取用户试图插入的值?
-
请注意,使用触发器,您就是在脖子上套上一根绳子。 Oracle 建议不要使用触发器实现业务逻辑。
-
抱歉不关心oracle的问题,了解触发器的用途。但是感谢@Ychdziu 的友好信息。永远不会在现实生活项目中使用。
-
编码建议 - 不要使用
NATURAL JOIN,因为它很难确定连接条件是什么。始终明确说明连接条件,以便每个人都可以看到它们。并且始终在您的INSERT语句中包含一个字段列表 - 这样您的INSERTs 将在修改表后仍然有效,或者您将能够轻松找到需要更新的语句。祝你好运。