解决方案 »
- c 程序在VC平台下 连接 Oracle成功,但数据无法交互[
- oracle10g如何热备,有的说用dataguad?,有具体说明如何做的吗???
- 怎样把这个字段的值导更新到DATE型字段中
- 数据库将查询出来的数据作为字段名
- 删除用户??????????
- Oracle8.1.7 中SQL查询语句中怎样去掉字段名的双引号
- 如何在dos下传递一参数到sqlplus下的变量或procedure中?
- 我在用Oracle Enterprise Manager Console 时执行导出操作为什么总报错:VNI-2015
- oracle生成xml时出ORA-06512错误,请问怎么解决?
- 请教各位前辈,从计算机原理的角度,解释一下慢查询导致的CPU拉高的原因
- Oracle两边链接查询,查*比查询具体字段还要快5倍的样子,怎么回事
- sum求和去重问题
以下更改T1时,将更改的记录存储在T2中,
create table t1(id number,nm varchar2(100));
create table t2(id number,nm varchar2(100));insert into t2 values(1,'n1');CREATE OR REPLACE TRIGGER test
before update ON t1
FOR EACH ROW
declare
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert into t2
select * from t1 where id = :old.id;
commit;
END;
update t1 set t1.id=10 where t1.id=1;commit;
需要导师姓名的时候就用视图。
以下更改T1时,将更改的记录存储在T2中,
create table t1(id number,nm varchar2(100));
create table t2(id number,nm varchar2(100));insert into t2 values(1,'n1');CREATE OR REPLACE TRIGGER test
before update ON t1
FOR EACH ROW
declare
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert into t2
select * from t1 where id = :old.id;
commit;
END;
update t1 set t1.id=10 where t1.id=1;commit;
自动带出的意思是 如果c_teacherid改变,c_teacher则会对应改变。
相当于update emp set c_teacher=
(select c_name from emp where c_oid=变化后的c_teacherid)
如下是建一个中间视图,当你对视图进行update时就能达到你要的效果:
create table t1(id number,nm varchar2(10)); --建测试表
--插入测试数据
insert into t1 values(1,'ct1');
insert into t1 values(2,'ct2');
commit;
--创建视图
create view v_t1 as select * from t1;
--在视图上创建trigger(只能创建instead of 类型的)
create or replace trigger test
instead of UPDATE ON v_t1
FOR EACH ROW
DECLARE
BEGIN
UPDATE t1
SET nm = (select nvl(nm,:old.nm) from t1 where t1.id=:new.id)
WHERE id = :old.id;
END t_v_test;
/
update v_t1 set id=2 where id=1; --更新视图的id,nm也会更新
如下是建一个中间视图,当你对视图进行update时就能达到你要的效果:
create table t1(id number,nm varchar2(10)); --建测试表
--插入测试数据
insert into t1 values(1,'ct1');
insert into t1 values(2,'ct2');
commit;
--创建视图
create view v_t1 as select * from t1;
--在视图上创建trigger(只能创建instead of 类型的)
create or replace trigger test
instead of UPDATE ON v_t1
FOR EACH ROW
DECLARE
BEGIN
UPDATE t1
SET nm = (select nvl(nm,:old.nm) from t1 where t1.id=:new.id)
WHERE id = :old.id;
END t_v_test;
/
update v_t1 set id=2 where id=1; --更新视图的id,nm也会更新
好的 非常感谢