【问题标题】:Creating a insert trigger on oracle views在 oracle 视图上创建插入触发器
【发布时间】: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 将在修改表后仍然有效,或者您将能够轻松找到需要更新的语句。祝你好运。

标签: sql oracle


【解决方案1】:

你需要:

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

NEW前面的冒号

【讨论】:

  • 或者在触发器定义中添加USING NEW AS NEW, OLD AS OLD
猜你喜欢
  • 1970-01-01
  • 2018-12-02
  • 2013-11-30
  • 1970-01-01
  • 2016-05-31
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多