oracle 数据库的触发器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 数据库的触发器相关的知识,希望对你有一定的参考价值。

oracle 数据库的触发器,在A表添加一条数据,然后将这条数据与B表关联查询到几条数据,添加到C表中怎么写?

create or replace trigger add_b_to_c
after insert on A
for each row
begin
if inserting then
insert into C(字段1,字段2,......) select 字段1,字段2,...... from B where <你的关联条件>
end if;
end;
/
这个就是对的呀
参考技术A create or replace trigger add_b_to_c
after insert on A
for each row
begin
if inserting then
insert into C(字段1,字段2,......) select 字段1,字段2,...... from B where <你的关联条件>
end if;
end;
/
参考技术B 这样就可以了。
create or replace trigger tri_test
after insert on table_a
for each row
DECLARE
-- local variables here
BEGIN

INSERT INTO Table_c
SELECT Table_a.Col_1,
Table_b.Col_1
FROM Table_a,
Table_b
WHERE Table_a.Col_2 = Table_b.Col_2;

END Tri_Test;

oracle触发器中需要通过字段来进行判断

比如建立一个触发器,当A表中的B字段数据是'C'的时候,进行后面的PL/SQL语句,我用
if exists (select............)会报错 function or pseudo-column 'EXISTS' may be used inside a SQL statement only
有没有解决方法或者更好的判断语句

参考技术A 插入A之前的触发示例:
create or replace trigger "TRIG_TEST_A"
   before insert on "A"
   for each row
begin
  if inserting then
    if :NEW."BM" = 'C' then  --如果插入的A记录,BM字段等于C,则写入A_BAK
      insert into A_BAK
        (BM, TEACHERS, ID)
      values
        (:NEW."BM", :NEW."TEACHERS", :NEW."ID"); 
    end if; 
  end if; 
end;

具体需求,根据触发器的语法进行调整

追问

if inserting
....
end if
这个判断语句是做什么的

追答

INSERTING:当触发事件是INSERT时,取值为TRUE,否则为FALSE。

本回答被提问者采纳
参考技术B 触发器的语法
CREATE [OR REPLACE] TRIGGER trigger_name
BEFORE | AFTER
INSERT | DELETE | UPDATE [OF column [, column …]]
[OR INSERT | DELETE | UPDATE [OF column [, column …]]...]
ON [schema.]table_name | [schema.]view_name
[REFERENCING OLD [AS] old | NEW [AS] new| PARENT as parent]
[FOR EACH ROW ]
[WHEN condition]

update后面可以跟 of column,column..... on tablename
把需要触发的字段写上,不触发的就别写了

以上是关于oracle 数据库的触发器的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库——触发器的创建与应用

Oracle数据库触发器问题

我的Oracle怎么创建不了触发器

oracle 创建触发器问题

Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段

使用此触发器 oracle 数据库更改表