-
sql update mit coalesce
Moin,
ein
PHP-Code:
update datei a set (f1, f2, f3) = ( select f1, f2, F3 from datei b where a.feld = b.feld and b.xxx=1 and b.datum = ( select max(c.datum) from datei c where c.yyy = :wert and ... ) and ... ) where a.f1=' ' and a.f2 = ' ' and a.f3 = ' ' and ...
bricht ab und zu ab, weil es keine passenden Werte in Datei b gibt.
Wenn ich
PHP-Code:
update datei a set (f1, f2, f3) = ( select coalesce(f1, f2, F3 from datei b where a.feld = b.feld and b.xxx=1 and b.datum = ( select max(c.datum from datei c where c.yyy = :wert and ... ) and ... , ' ', ' ', ' ')) where a.f1=' ' and a.f2 = ' ' and a.f3 = ' ' and ...
davon mache, ist die Syntax falsch.
muß ich das "and exists..." mit dem ganzen Gerödel machen oder gibt es eine Syntax die
mit dem coalesce funktioniert?
Danke
der ILEMax
-
Coalesce je Feld: coalesce(b.f1, a.f1), ....
Wobei der "where exists" effektiver (performanter) ist, da ja nicht so viel geändert werden muss.
Bei Journalisierung ist die Transaktion auch kleiner.
-
Danke, funktioniert erstmal
-
Zitat von Fuerchau
Bei Journalisierung ist die Transaktion auch kleiner.
Nicht-Änderungen werden weder protokolliert, noch werden die Sätze für commit gesperrt.
D*B
-
Ich häng mich mal hier rein, es funzt nicht ...
PHP-Code:
update TEMP#B/FILE XX
set (BEZ, WERT) =
(select coalesce(substr(a.INHACD, 01, 30), '*fehlt'),
coalesce(substr(b.INHACD, 24, 22), '*fehlt')
from CBUCHP a left outer join CBUCHP b
on a.FINR=b.FINR and a.SART=b.SART
and a.SPRC=b.SPRC and a.SAKZ=b.SAKZ
and substr(a.RKEY, 1, 2)=substr(b.RKEY, 1, 2)
and ' 01 ' =substr(b.RKEY, 3, 4)
where a.SART='ABCD ' and a.SAKZ='6'
and substr(a.RKEY, 1, 2)=digits(XX.BANK)
and substr(a.RKEY, 3) = ' ')
Wenn in CBUCH der Eintrag für eine Bank mit rkey 'bb ' fehlt (Banknr, rest Blank --> letzte substr)
bricht er ab mit "Nullwerte für Spalte oder Variable BEZ nicht zulässig".
Erwartet hätte ich '*fehlt' in dem Testsatz
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Ist ja auch kein Wunder, dir fehlt der Where zum Update.
Wenn der Select nichts findet, wird insgesamt NULL zurück geliefert. Da kommt der innere Coalesce dann zu spät.
Also nach der letzten Klammer noch ein Where auf die Daten, die auch tatsächlich vorhanden sind.
Der Rowupdate erlaubt ja nun leider kein Gesamt coalesce.
Eine Idee hätte ich noch:
select .....
union values( xx.Bet, xx.Wert )
fetch first rows only
)
Besser wäre aber die Where-Klausel.
-
Danke erstmal,
Das SQL (ohne Coalesce) läuft schon seid Jahren fehlerfrei.
Es sollen ja auch alle Sätze geändert werden, daher kein Where.
Nur hat irgend ein Depp aus dem Codebuch einen Satz gelöscht, vermutlich aus versehen.
In xx.Bank habe ich z.B.
01
05
17
22
im Codebuch steht
01
01 01
05
05 01
17 01
22
22 01
ein where mit exists (oder was meinst du) würde ja verhindern, das der satz überhaubt geändert wird.
Aber den Wert aus den 17 01 hätte er ja setzen können.
also 2 Statement?
Robi
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Du kannst es doch auch mal mit dem "union values('*fehlt', '*fehlt')" versuchen.
Um es noch komplizierter zu machen, wäre auch folgendes möglich:
Update ...
set (a, b) = values(
coalesce((select ...), '*fehlt')
,coalesce((select ...), '*fehlt')
)
Dies bedeutet dann allerdings 2 Singlevalue-Selects, wobei da dann jeweils das Coalesce auch entfallen kann.
Klar kannst du auch 2 Updates machen: 1. mit exists(...), 2 mit Konstanten und not exists (...).
Similar Threads
-
By Progras in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 18-11-16, 11:16
-
By co_steffl in forum IBM i Hauptforum
Antworten: 12
Letzter Beitrag: 25-06-14, 14:17
-
By Joe in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 15-04-03, 15:06
-
By Joe in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 01-04-03, 19:50
-
By schreibr in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 12-09-01, 08:22
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks