17,086
社区成员
发帖
与我相关
我的任务
分享
--解决的办法,恐怕你现在的做法要修改了。
--1.在你的test1表中创建触发器,触发器向test2表中插入数据,这种情况应该可以满足你现在的做法
insert into test1 values(...)
--test2表的数据也会变化
--2.在你的view中创建触发器,但是你使用插入语句时应该用这个
insert into test1_view values(...)
--目前,只知道这两种解决方法,你的意思是想这样子(在test1表中插入数据,
------然后会自动生成到test1_view中,然后触发test1_viewe的触发器,
---------将test1_view中的数据插入到test2表中。)是不是这个意思?
--只是这个貌似实现不了,还是向view中插入数据,然后你在触发器中可以分别向test1,test2表中插入数据。
SQL> create table TEST1
2 (
3 ID NUMBER,
4 NAME VARCHAR2(20),
5 PASSWORD VARCHAR2(20)
6 )
7 /
表已创建。
SQL> create table TEST2
2 (
3 ID NUMBER,
4 NAME VARCHAR2(20),
5 PASSWORD VARCHAR2(20)
6 )
7 /
表已创建。
SQL> CREATE OR REPLACE VIEW TEST1_VIEW AS
2 SELECT ID,NAME,PASSWORD FROM TEST1
3 /
---去掉只读的属性 ,像这种视图则可以插入 ,(对列名没做任何修饰 以及没有函数等)
视图已创建。
SQL> ed
已写入 file afiedt.buf
1 create or replace trigger test_trigger
2 instead of insert on test1_view
3 FOR EACH ROW
4 begin
5 INSERT INTO test2 VALUES (:NEW.ID,:NEW.NAME,:NEW.PASSWORD);
6 INSERT INTO test1 VALUES (:NEW.ID,:NEW.NAME,:NEW.PASSWORD);
7* END;
SQL> /
触发器已创建
SQL> insert into TEST1_VIEW values ('22','22','22')
2 /
已创建 1 行。
SQL> commit
2 /
提交完成。
SQL> select * from test1
2 /
ID NAME PASSWORD
---------- -------------------- --------------------
22 22 22
SQL> select * from test2
2 /
ID NAME PASSWORD
---------- -------------------- --------------------
22 22 22