CREATE TABLE T1 (
ID INTEGER NOT NULL,
N VARCHAR(10)
);
ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (ID);
CREATE TABLE T2 (
ID INTEGER NOT NULL,
T1_ID INTEGER
);
ALTER TABLE T2 ADD CONSTRAINT PK_T2 PRIMARY KEY (ID);
ALTER TABLE T2 ADD CONSTRAINT FK_T2 FOREIGN KEY (T1_ID) REFERENCES T1 (ID);
INSERT INTO T1 (ID, N) VALUES (1, 'a');
INSERT INTO T1 (ID, N) VALUES (2, 'b');
INSERT INTO T2 (ID, T1_ID) VALUES (99, 1);
INSERT INTO T2 (ID, T1_ID) VALUES (23, 2);
CREATE VIEW VV(
T1ID,
T1N,
T2ID)
AS
select t1.id, t1.n, t2.id
from t1, t2
where t1.id = t2.t1_id
;
select * from vv;
T1ID T1N T2ID
1 a 99
2 b 23
без тригер
update vv set t1n='x',t2id=66 where t1id=1;
The object of the insert, delete or update statement is a view for which the
requested operation is not permitted.
cannot update read-only view VV.
създаваме тригер (какъв е смисъла в случая е без значение
)
CREATE TRIGGER VV_BU0 FOR VV
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
update t1 set n=new.t1n where id=new.t1id;
update t2 set ID=new.t2id where id=OLD.T2ID;
end
и вече можем да правим ъпдейт
update vv set t1n='x',t2id=66 where t1id=1;
1 record(s) was(were) updated in T1
1 record(s) was(were) updated in T2
select * from vv;
T1ID T1N T2ID
1 x 66
2 b 23
Firebird 1.5.2.4731
Нека постгресаджиите да кажат при тях как е