create table table1
字段1 VARCHAR2(255),
字段2 VARCHAR2(255),
字段3 VARCHAR2(255),
字段4 VARCHAR2(255),
字段5 VARCHAR2(255)
)
和
create table table2
字段6 VARCHAR2(255),
字段7 VARCHAR2(255),
字段8 VARCHAR2(255),
字段9 VARCHAR2(255),
字段10 VARCHAR2(255)
)
现在我想创建一个触发器:当 table1中的 某些字段,如字段1,或字段2..发生改变,则触发table2中的字段也发生相应的变化,如table2中字段6的值变成1,table2中字段7变成2,等,这种触发器改如何编写,说明下,是Oracle数据库,小弟新手,,请高手指点,谢谢!
12 个解决方案
#1
--触发器简单,但是根据你的描述 你的 table1 和 table2 需要一个关联条件,假设关联条件为 字段5=字段10
create or replace trigger table1_trigger
after update on table1
for each row
begin
update table2
set 字段6=1,
字段7=2
where 字段10 := old.字段5; --这里的条件是假设的,你根据你自己的实际情况处理。
end;
#2
--建议你直接读下触发器的创建过程,就会了。
例子:
CREATE OR REPLACE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON <tableName>
FOR EACH ROW
BEGIN
--do something
END
例子:
CREATE OR REPLACE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON <tableName>
FOR EACH ROW
BEGIN
--do something
END
#3
你好,如果我只是当table1中的某一个字段,而非任意字段,如字段3发生改变时才引发触发器,改如何修改,谢谢
#4
CREATE OR REPLACE TRIGGER TG_SALARYMONTHINFO
AFTER UPDATE ON T_SALARYAGENCYMONTHSALINFO
FOR EACH ROW
BEGIN
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
END;
如此代码编译时提示有编译错误,请问各位错误再哪?
AFTER UPDATE ON T_SALARYAGENCYMONTHSALINFO
FOR EACH ROW
BEGIN
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
END;
如此代码编译时提示有编译错误,请问各位错误再哪?
#5
+1
#6
+1 ?什么意思?
#7
应当是Bdgagency:= OLD.Bdgagency;有错误,不要那个冒号,带冒号是赋值用的,在SQL里不要带上它。其次你的这个逻辑有问题,在一下贴我详细说明。
#8
BEGIN
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
END;
上面这段代码的逻辑是错误的,错误内容有两点:
1. 不管bdgagency列是否有变化,都会将T_SALARY_SALARIESDATA.text1设为1
2. 使用bdgagency列做为where条件,需要保证Bdgagency是表T_SALARY_SALARIESDATA的主键或者唯一索引。否则请使用主键做为where条件,以免更新了其它不应当更新的数据。
-- 假设两表中都存在列R_ID,且该列为主键
if ( OLD.Bdgagency <> NEW.Bdgagency) then
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE R_ID = OLD.R_ID;
end if;
#9
这么明显的错误,还+1!
where col1 = :old.col1;
where col1 = :old.col1;
#10
--触发器简单,但是根据你的描述 你的 table1 和 table2 需要一个关联条件,假设关联条件为 字段5=字段10
create or replace trigger table1_trigger
after update of 字段3 on table1
for each row
begin
update table2
set 字段6=1,
字段7=2
where 字段10 = :old.字段5; --这里的条件是假设的,你根据你自己的实际情况处理。
end;
#11
10楼时根据字段。。 of 字段名。。其他的都是update表的时候
#12
触发器简单多了
#1
--触发器简单,但是根据你的描述 你的 table1 和 table2 需要一个关联条件,假设关联条件为 字段5=字段10
create or replace trigger table1_trigger
after update on table1
for each row
begin
update table2
set 字段6=1,
字段7=2
where 字段10 := old.字段5; --这里的条件是假设的,你根据你自己的实际情况处理。
end;
#2
--建议你直接读下触发器的创建过程,就会了。
例子:
CREATE OR REPLACE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON <tableName>
FOR EACH ROW
BEGIN
--do something
END
例子:
CREATE OR REPLACE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON <tableName>
FOR EACH ROW
BEGIN
--do something
END
#3
你好,如果我只是当table1中的某一个字段,而非任意字段,如字段3发生改变时才引发触发器,改如何修改,谢谢
#4
CREATE OR REPLACE TRIGGER TG_SALARYMONTHINFO
AFTER UPDATE ON T_SALARYAGENCYMONTHSALINFO
FOR EACH ROW
BEGIN
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
END;
如此代码编译时提示有编译错误,请问各位错误再哪?
AFTER UPDATE ON T_SALARYAGENCYMONTHSALINFO
FOR EACH ROW
BEGIN
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
END;
如此代码编译时提示有编译错误,请问各位错误再哪?
#5
+1
#6
+1 ?什么意思?
#7
应当是Bdgagency:= OLD.Bdgagency;有错误,不要那个冒号,带冒号是赋值用的,在SQL里不要带上它。其次你的这个逻辑有问题,在一下贴我详细说明。
#8
BEGIN
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE Bdgagency:= OLD.Bdgagency;
END;
上面这段代码的逻辑是错误的,错误内容有两点:
1. 不管bdgagency列是否有变化,都会将T_SALARY_SALARIESDATA.text1设为1
2. 使用bdgagency列做为where条件,需要保证Bdgagency是表T_SALARY_SALARIESDATA的主键或者唯一索引。否则请使用主键做为where条件,以免更新了其它不应当更新的数据。
-- 假设两表中都存在列R_ID,且该列为主键
if ( OLD.Bdgagency <> NEW.Bdgagency) then
UPDATE T_SALARY_SALARIESDATA SET T_SALARY_SALARIESDATA.text1 =1 WHERE R_ID = OLD.R_ID;
end if;
#9
这么明显的错误,还+1!
where col1 = :old.col1;
where col1 = :old.col1;
#10
--触发器简单,但是根据你的描述 你的 table1 和 table2 需要一个关联条件,假设关联条件为 字段5=字段10
create or replace trigger table1_trigger
after update of 字段3 on table1
for each row
begin
update table2
set 字段6=1,
字段7=2
where 字段10 = :old.字段5; --这里的条件是假设的,你根据你自己的实际情况处理。
end;
#11
10楼时根据字段。。 of 字段名。。其他的都是update表的时候
#12
触发器简单多了