[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    393

    Thumbs down sql update mit coalesce

    Moin,
    ein
    PHP-Code:
    update datei a set (f1f2f3) = (
        
    select f1f2F3 
         from datei b 
       where a
    .feld b.feld and b.xxx=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 (f1f2f3) = (
        
    select coalesce(f1f2F3 
         from datei b 
       where a
    .feld b.feld and b.xxx=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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    393
    Danke, funktioniert erstmal

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Bei Journalisierung ist die Transaktion auch kleiner.
    Nicht-Änderungen werden weder protokolliert, noch werden die Sätze für commit gesperrt.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    Ich häng mich mal hier rein, es funzt nicht ...

    PHP-Code:
    update TEMP#B/FILE XX                                       
       
    set (BEZWERT) =                                    
           (
    select coalesce(substr(a.INHACD0130), '*fehlt'),    
                   
    coalesce(substr(b.INHACD2422), '*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.RKEY12)=substr(b.RKEY12)   
                and 
    ' 01 '              =substr(b.RKEY34)     
                      
    where a.SART='ABCD ' and a.SAKZ='6'       
                        
    and substr(a.RKEY12)=digits(XX.BANK)
                        and 
    substr(a.RKEY3) = ' '
    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!)

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    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!)

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    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 (...).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL Nullwerte nicht zulässig trotz coalesce oder ifnull
    By Progras in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 18-11-16, 11:16
  2. SQL Update
    By co_steffl in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 25-06-14, 14:17
  3. SQL update
    By Joe in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 15-04-03, 15:06
  4. SQL update
    By Joe in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 01-04-03, 19:50
  5. Update mit SQL
    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
  •