Anmelden

View Full Version : Update bei Views?



deni87991
22-08-06, 14:23
Hallo!

Hier mal eine Frage:

Ich habe einen View auf 2 Tabelle erstellt, die mit einem INNER Join verknüpft sind.
Nun will ich gern ein Update auf diesen View machen aber das will nicht. Geht das generell nicht? Ein Kollege meinte, er hätte davon gelesen und es würde sich super für unsere Faktura machen, da somit das Update schneller gemacht werden könnte, als wenn die Tabellen ge-updatet werden würden.

Hier die Source:


create view test.testview as

select * from gatdat.baskpfdp join gatdat.basposdp on kbb = Pbb
and kgpnrw = pgpnrw and pgej = kgej;

update test.testview set pstkz = '2' where
kbb = 'DEB' and kgej = 'N'
and kmndn = 692 and kgpnrw = '0028940' and pppos = 1

Kann mir jemand weiterhelfen oder mir sagen, wo ich diesen Problem nachlesen kann?

Fuerchau
22-08-06, 14:26
Ein Update kann bei der DB2/400 nicht auf Join's durchgeführt werden.
Schneller wäre das auch nicht, da es ausschließlich auf die Zugriffswege der Tabelle (Schlüssel) beim Update ankommt.

deni87991
22-08-06, 14:36
Klingt logisch...danke :-)

B.Hauser
24-08-06, 09:39
Hallo,

ich muss mal wieder widersprechen!

Ab Release V5R4M0 (evt. auch schon am Release V5R3M0 mit PTF) gibt es die Möglichkeit Instead Of-Trigger zu generieren.

Diese Trigger sind speziell dafür ausgelegt, nicht updatefähige Views updatefähig zu machen.
Instead Of (Anstatt) ist ein neuer Aktivierungszeitpunkt (wie BEFORE und AFTER), der jedoch nur in Verbindung mit SQL-Triggern angegeben werden kann. Im Gegensatz zu anderen Triggern, wird ein Instead-Of-Trigger nicht für eine physische Datei oder Tabelle registriert, sondern für eine SQL-View.
DDS-beschriebene logische Dateien werden nicht unterstützt, da Instead-Of-Trigger nur von der neuen SQL-Query-Engine (SQE) bearbeitet werden. Die Auflösung von DDS-beschriebenen logischen Dateien kann jedoch nur über die klassiche Classic-Query-Engine (CQE) erfolgen.

Wie bei allen anderen Triggern können Instead-Of-Trigger für die Ereignisse INSERT, UPDATE und DELETE erstellt werden.
Erfolgt nun ein Update, Insert oder Delete auf eine View, für die ein entsprechender Instead-Of-Trigger registriert wurde, wird dieses Trigger-Programm aufgerufen und ausgeführt.
In diesem Trigger-Programm können dann mehrere Updates (auf die verbundenen Dateien) und auch andere Aktionen, (eigentlich alles, was in einem Programm hinterlegt werden kann) ausgeführt werden.

Nähere Beschreibungen der Instead-Of-Trigger sind in der SQL-Referenz Release V5R4 zu finden:
SQL Reference Release V5R4 (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmst.pdf)

Birgitta

Fuerchau
28-08-06, 09:10
Wer solche Datenbankdesigns dann noch versteht .....