Database oracle触发器在表中插入新行时更新视图的新行

Database oracle触发器在表中插入新行时更新视图的新行,database,oracle,triggers,oracle12c,Database,Oracle,Triggers,Oracle12c,有人能帮我在oracle表达式视图x上写一个触发器吗?该视图通过select查询从另一个表y填充数据 逻辑是: 在表y中插入新行后;当表y中插入行上的新列的值为“xyz”时,我希望根据插入表y的新行上的条件“xyz”更新表达式视图x的某些列 有人能帮忙吗 钱德拉我就是这样理解这个问题的(不过,更多的是通过阅读评论,而不是一个“表达观点”让我困惑的问题) 这将是一个基于触发器的解决方案;它检查A列中输入的值是否大于100(这是您的“if条件”);如果是,它将同时修改C列和D列。如果没有,它什么也做

有人能帮我在oracle表达式视图x上写一个触发器吗?该视图通过select查询从另一个表y填充数据

逻辑是: 在表y中插入新行后;当表y中插入行上的新列的值为“xyz”时,我希望根据插入表y的新行上的条件“xyz”更新表达式视图x的某些列

有人能帮忙吗


钱德拉

我就是这样理解这个问题的(不过,更多的是通过阅读评论,而不是一个“表达观点”让我困惑的问题)

这将是一个基于触发器的解决方案;它检查A列中输入的值是否大于100(这是您的“if条件”);如果是,它将同时修改C列和D列。如果没有,它什么也做不了

SQL> create table test (a number, b number, c number, d number);

Table created.

SQL> create or replace trigger trg_bi_test
  2    before insert on test
  3    for each row
  4    when (new.a > 100)
  5  begin
  6    :new.c := 3;
  7    :new.d := 4;
  8  end;
  9  /

Trigger created.

SQL> insert into test (a) values (50);

1 row created.

SQL> insert into test (a) values (200);

1 row created.

SQL> select * from test;

         A          B          C          D
---------- ---------- ---------- ----------
        50
       200                     3          4

SQL>

你所说的“表达式视图”是什么意思?如果您有一个视图,其查询引用了您正在更新的表,那么它无论如何都会看到新值——您不需要触发器。如果它没有引用该表,则可以使用触发器更新它正在引用的表,尽管这意味着数据没有正常化。现在还不清楚你到底想做什么。嗨,Alex,谢谢你的更新,我想写一个触发器,它将更新同一个表中新插入行的两列,如果条件将检查新插入行的另一列值。那么视图从何而来?您现在似乎在一个表中引用多行,而不是两个表。编辑你的问题,阐明你真正需要达到的目标;显示表定义、视图定义(如果有)及其相关内容、示例起始数据、将运行的insert语句和预期结果。它可能还是太宽了,但目前还无法确定。嗨,亚历克斯,我指的不是表格中的多行。我只有一个表假设“Test”。有4列A、B、C、D。当一个新行插入到“Test”时;列A的值将位于比较块中(如果条件为)。如果条件为true,那么我需要更新行的C、D列,而不影响列B的值。所有事务都将位于新的单行和单表“Test”上。这有什么意义吗?我想要一个触发器在为单个表插入时在新行上执行此任务。谢谢Littlefoot。我试试这个。这个触发器对新表的行或已有行的表有效吗?如果我有更多的when条件呢?触发器只对新添加的行起作用;现有的不受影响-您必须编写另一段代码来更新它们。如果有更多条件,请将它们添加到WHEN子句中。如果你不能,还有一个好的If-THEN-ELSE,在PL/SQL中可用(触发器是什么)。嗨,小脚,我按照你说的方法做了,但是触发器不能按照我的要求工作。如果我向你详细说明要求可以吗?当然可以;编辑你的问题并发布新信息(只是不要在评论中全部输入);我以不同的可能方式实现了需求。谢谢你宝贵的帮助。