现有两张表,table1和table2:如下:
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数据库,小弟新手,,请高手指点,谢谢!
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数据库,小弟新手,,请高手指点,谢谢!
解决方案 »
- sysdba登录 ORA-01017:用户名密码出错 故障排查实例
- 哪位大侠能够指点一下,下载Oracle安装文件的时候,上面提示的Product是Family,是不是表示个人版呢
- 如何把台式机上oracle 10g的数据库“mysjk”复制到我新买的笔记本上(都windows)
- oracle远程连接服务器问题,急啊!!!!!
- oracle用sql语句导出excel
- 如何分组?
- oracle 数据恢复
- 求一段生成客户ID号的存储过程
- 我在9i下按照用户将数据导出,移去方案下的相关用户的表,再导入数据怎么看不见方案下的表了?请教大伙.
- 菜鸟求助
- 关于oracle数据类型转换的详细机制
- oracle sql语句问题
--触发器简单,但是根据你的描述 你的 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;
例子:
CREATE OR REPLACE TRIGGER `<databaseName>`.`<triggerName>`
< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
ON <tableName>
FOR EACH ROW
BEGIN
--do something
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;如此代码编译时提示有编译错误,请问各位错误再哪?
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;
--触发器简单,但是根据你的描述 你的 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;