[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    759
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Das ist mir schon klar, dass ich NULL-Indikatoren abfragen muss.
    Ich finde nur die Ungleichbehandlung fragwürdig.
    Kein Mensch muss müssen...

    PHP-Code:
    exec sql select coalescemax(PLDAT), '01.01.0001') , 
                    
    coalescesum(PLMENG), 0) ,
                    
    count(*)                
               
    into :Wareneingangsdatum
                   
    ,:Wareneingangsmenge
                   
    ,:Gefunden               
               from D060                          
              where PLBBNR   
    = :D242.BBNR         
                
    and PLABNR   = :D242.BBABNR       
                
    and PLPONR   = :D242.BBPONR 

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dies funktioniert leider nicht, wenn der Select keine Daten findet;-).
    Da die Felder selber kein NULL erlauben, ist das Coalesce hier sinnlos.

    Wenn schon, dann muss man den Coalesce außerhalb machen, allerdings erlaubt ein scalarer Subselect nur 1 Ergebnisfeld, die Abfrage müsste also 2 Mal gemacht werden.

    exec sql values(coalesce((select f1 ....), Default), coalesce((select f2 ....), Default)) into ...

    Man könnte es auch als Left join machen:

    with EinSatz as (
    values (1)
    )
    select coalesce(f1, default), coalesce(f2, default) from EinSatz
    left join (
    select max(f1) f1, sum(f2) f2 from MyTable
    where ...
    ) x on 1=1

    Vielleicht hat Birgitta da noch mehr Ideen;-).

    Klar kann ich vor dem SQL einen CLear machen. Allerdings läuft auf den SQL-Variablen ebenso ein Clear so dass der 1. Clear (Micro-Optimierung) unnötig ist.
    Die NULL-Indikatoren werden doch nur benötigt um nicht haufenweise Joblogs zu produzieren die die Maschine vollmüllen (auch ohne Debugmodus!).

    Bei obigem SQL sollte ein SQLCODE 100 eigentlich vollkommen ausreichen;-).
    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
    Mar 2002
    Beiträge
    5.365
    ... wie wärs mit create view mit group by?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Da ich ja eine eindeutige Where-Klausel habe, brauche ich ja keinen Group By.
    Außerdem löst das ebenso nicht das Problem bei No Data, ich bräuchte auch entsprechend mehr NULL-Inds.
    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

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Da ich ja eine eindeutige Where-Klausel habe, brauche ich ja keinen Group By.
    Außerdem löst das ebenso nicht das Problem bei No Data, ich bräuchte auch entsprechend mehr NULL-Inds.
    ... die view tauscht dir die nullvalues gegen den sqlcode 100

    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/

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Dann könnte das mit
    select * from (select max....)
    klappen.
    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
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Dann könnte das mit
    select * from (select max....)
    klappen.
    ... der casus knaxus ist, dass die where clause in den äußeren select wandert.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Wieso? Ich kodiere den doch innerhalb?
    Aber was solls, da alles nichts hilft!

    Der wesentliche Unterschied ist
    a) select .... into ....
    b) open, fetch, close

    In der Variante a) benötige ich Null-Inds oder einen "set ... coalesce(....)" oder "Values((coalesce()) into".
    In der Variante b) kommt SQLCODE = 100.
    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

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wieso? Ich kodiere den doch innerhalb?
    Aber was solls, da alles nichts hilft!

    Der wesentliche Unterschied ist
    a) select .... into ....
    b) open, fetch, close

    In der Variante a) benötige ich Null-Inds oder einen "set ... coalesce(....)" oder "Values((coalesce()) into".
    In der Variante b) kommt SQLCODE = 100.
    ... steh mal kurz auf, Du sitzt auf der Leitung:

    exec sql select maxPLDAT, sum(PLMENG) sumplmeng
    into :Wareneingangsdatum
    ,:Wareneingangsmenge
    from (
    select max(pldat) maxpldat, sum(plmeng) sumplmeng
    from D060
    group by (PLBBNR, PLABNR, PLPONR)
    ) P
    where PLBBNR = 242.BBNR
    and PLABNR = 242.BBABNR
    and PLPONR = 242.BBPONR ;

    Cefix, irgendwie verhunzt er mir die Variablennamen in der where clause!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ich hätte den Where trotzdem in den Subselect gesteckt.
    Ansonsten:
    Den Text in CODE setzen oder nach dem Doppelpunkt ein Leerzeichen lassen
    ... : MyVar ...
    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

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ich hätte den Where trotzdem in den Subselect gesteckt.
    Ansonsten:
    Den Text in CODE setzen oder nach dem Doppelpunkt ein Leerzeichen lassen
    ... : MyVar ...
    ... wenn Du den where in den subselect steckst, kriegst Du wieder Nullvalues zurück, wenn keine Sätze gefunden werden!!!
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... CTE reicht auch schon:

    with d as (select max(PLDAT) maxpldat, sum(PLMENG) sumplmeng
    from D060
    group by (PLBBNR, PLABNR, PLPONR))
    select maxpldat, sumplmeng
    from d
    where ....

    und dann kommt sqlcode 100 statt eines Satzes mit Nullvalues.

    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/

Similar Threads

  1. SQL-Precompiler mitten in einer DCL-DS
    By prsbrc in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 16-07-19, 06:44
  2. SQL-Precompiler
    By DKSPROFI in forum IBM i Hauptforum
    Antworten: 0
    Letzter Beitrag: 19-10-17, 06:54
  3. Nutzung von **free RPG und SQL Precompiler wirft Fehler?
    By Dominic K. in forum NEWSboard Programmierung
    Antworten: 21
    Letzter Beitrag: 14-09-16, 15:43
  4. Antworten: 4
    Letzter Beitrag: 23-02-16, 11:15
  5. Zufällig gefunden
    By KingofKning in forum NEWSboard Server Job
    Antworten: 6
    Letzter Beitrag: 11-11-14, 18:26

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •