Anmelden

View Full Version : update auf eine "joined" logische Datei



Seiten : [1] 2

wilfried
21-11-17, 07:46
Hallo,
ich möchte ein SQL-Update auf eine LF-Datei machen. Die ist mittels Join aus zwei physischen Dateien aufgebaut.

Es kommt da ein SQL0150 ?
Was wäre eine Alternative zu diesem LF, den ich mit SQL bearbeiten kann?

DANKE

B.Hauser
21-11-17, 07:55
Es ist und war noch nie möglich eine gejointe Datei zu ändern, unabhängig davon, ob man mit native I/O oder mit SQL arbeitet.

Du musst die zugrundeliegenden physischen Dateien einzeln updaten.

Wenn es eine JOINED View wäre, bestünde noch die Möglichkeit einen Instead Of Trigger dranzuhängen, in dem dann die Updates auf die einzelnen Dateien erfolgt.

Aber bei DDS beschriebenen logischen Dateien ist das nicht möglich.

Bwz. Du solltes i.a. auch darauf verzichten logische Dateien mit SQL anzusprechen, sondern entweder über die physischen Dateien oder Tabellen oder über eine View gehen

Birgitta

wilfried
22-11-17, 06:57
Ok, vielen Dank.
Wilfried

BenderD
22-11-17, 10:33
klare Empfehlungen von mir:
- grundsätzlich in der Applikation nur Views verwenden und diese nie ändern, kommt ein Feld hinzu, gibt es eine zusätzliche neue View.
- instead Trigger sind eine der wichtigsten Neuerungen von DB2/400 in den letzten Releases und sind hier das Mittel der Wahl.
Im Kern geht es dabei um Entkoppelung von Datenbank und Anwendung. Zieht man das konsequent durch (was auch kompletten Verzicht auf RLA bedeutet), kann man sehr viel am Datenbank Design weiterentwickeln, ohne dass die Anwendung das überhaupt merkt.

D*B

GJV23
23-11-17, 08:27
was auch kompletten Verzicht auf RLA bedeutet

Was ist damit gemeint ?

BenderD
23-11-17, 08:51
RLA := record level access
sprich: keine F Bestimmungen, kein setll, chain, read und co.

D*B

GJV23
23-11-17, 09:28
Danke, habe verstanden,

GJV23

dibe
23-11-17, 11:50
Darf ich nochmal nachfragen ...

Dateien miteinamder verknüpfen als View, dabei Felder angeben und nicht * (= alle) verwenden!
In den Programmen mit SQL die View lesen.
Muß ein Pgm ein Feld eines oder mehrerer PF der View ändern, mach ich im Pgm

Update view set Feld = wert where "eindeutige identifikation des View-Satzes" ...
(oder geht der update ohne selektion da der Satz ja vorher gelesen wurde? --> Bsp?)

Und ein Trigger, der mit SQL geschrieben ist macht dann den 'echten' update in das PF?

Leider finde ich dafür kein Bsp im Netz, hat jemand einen link für mich?
Bsp f.
- instead Trigger (source Code)
- wie werden die an/ab gehängt
- hängen die an der View oder doch am PF?

Springt ein 'normaler' Trigger auch noch an, wenn der SQLTrigger die PF ändert/schreibt?

vielen Dank
DiBe

BenderD
23-11-17, 11:59
Darf ich nochmal nachfragen ...

Dateien miteinamder verknüpfen als View, dabei Felder angeben und nicht * (= alle) verwenden!
In den Programmen mit SQL die View lesen.
Muß ein Pgm ein Feld eines oder mehrerer PF der View ändern, mach ich im Pgm

Update view set Feld = wert where "eindeutige identifikation des View-Satzes" ...
(oder geht der update ohne selektion da der Satz ja vorher gelesen wurde? --> Bsp?)

Und ein Trigger, der mit SQL geschrieben ist macht dann den 'echten' update in das PF?

Leider finde ich dafür kein Bsp im Netz, hat jemand einen link für mich?
Bsp f.
- instead Trigger (source Code)
- wie werden die an/ab gehängt
- hängen die an der View oder doch am PF?

Springt ein 'normaler' Trigger auch noch an, wenn der SQLTrigger die PF ändert/schreibt?

vielen Dank
DiBe

- normales create view as select mit oder ohne *
- create instead of trigger in https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjKzsOL0tTXAhUGZVAKHUMVACoQFggmMAA&url=http%3A%2F%2Fwww.redbooks.ibm.com%2Fredbooks%2 Fpdfs%2Fsg248326.pdf&usg=AOvVaw2A76wGdm7Xcja8T5-KXauU
- positioned update (mit where current of) oder searched update mit echter where clause
- der trigger muss dann die Daten auf die Basistabellen verteilen etc.
- trigger auf den unterliegenden PF werden ausgeführt.

D*B

dibe
23-11-17, 12:21
Vielen Dank!
Wenn ich mich doch für * = alle Felder entscheide, dann passt Ihr Wunsch: "View nie ändern" aber nicht mehr!
Und der verweis auf das Red Book ...
heiß unterm Strich das wir SQL programmieren lernen müssen?
Bisher reichte uns ein ein bischen
select
updat
delete
set
mit verschiedenen "Join" oder mal ein "With" davor.
Schade, dann wird das wohl noch dauern.
Danke