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

    sql datenexistenz

    Hi,
    ich hab hier einen Ablauf, der nur staten darf, wenn es eine best. Datenkonstelation gibt.

    Nun kann ich natürlich Datei 1 lesen, dann 2, dann 3 ... und am Ende verarbeiten, wenn alles vorhanden war.

    Aber ich dachte mir, sei mal modern, nimm mal sql (im ILE)

    also
    set zahl = (select count(*) from ...
    inner join ... inner join ...
    where ...
    OPTIMIZE for 1 Rows

    (ich will ja nur wissen ob es mind 1 Satz gibt)

    Das geht aber nicht.

    Ebenso beim
    select dateifeld into :var from ...
    inner join ... inner join ...
    where ...
    OPTIMIZE for 1 Rows

    mit max(Feldname) oder min() zu arbeiten währe ne Alternative.

    Gibt's noch eine Möglichkeit 'schnell'
    zu dem Ergebniss zu kommen?

    Oder doch die 'unmoderne' alte Variante.
    Danke
    Euer ILEMax

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.247
    select
    (select count(*) from datei1 where ...)
    ,
    (select count(*) from datei2 where ...)
    :
    into : Count1, : Count2 ...

    from qibm.sysdummy1
    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
    Aug 2001
    Beiträge
    2.875
    Die schnellste Variante mit SQL ist:

    Code:
    /Free
     clear MyVar;
     Exec SQL Select 1 into :MyVar
                 From SysIbm/SysDummy1
                 where exists (Select 1 
                                  from ... inner join ...
                                       ... inner join ...
                                       ... inner join ...);
    Etwas langsamger ist:
    Code:
    /Free
     Clear MyVar;
     Exec SQL Select 1 into :MyVar
                 from ... inner join ...
                      ... inner join ...
                      ... inner join ...
                 Fetch first row only;
    Alles andere kannst Du vergessen.
    Beide Methoden müssen aber immer noch langsamer sein als mehrere Chains oder SetLLs nacheinander auszuführen.

    Ich vermute, Du hast Optimize for X Rows mit Fetch X Rows only verwechselt.

    Optimize for X Rows ist das Optimierungsziel. Ist x eine kleine Zahl wird so optimiert, dass der 1. Block an Daten möglichst schnell zurückkommt. Bei einer sehr großen Zahl wird so optimiert, dass das Gesamt-Ergebnis möglichst schnell ermittelt wird. Ausschlag hat diese Angabe eigentlich nur, wenn der Optimizer überlegt ob Index-Access oder Table Scan.

    Bei Select ... Into und Set mit Select-Statement muss sichergestellt werden, dass entweder genau 1 oder kein Datensatz zurückgegeben wird. Werden mehrere Datensätze zurückgegeben, wird ein negativer SQL code ausgegeben werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    393
    Danke Birgitta

    /Free
    clear MyVar;
    Exec SQL Select 1 into :MyVar
    From SysIbm/SysDummy1
    where exists (Select 1
    from ... inner join ...
    ... inner join ...
    ... inner join ...);
    ok, versuch ich, danke

    hört er in dieser Variante denn auf zu suchen, wenn der erste 'exists' gefunden wurde ?

    ILEMax

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    hört er in dieser Variante denn auf zu suchen, wenn der erste 'exists' gefunden wurde ?
    Yep ...

    ... allerdings steht und fällt das Ganze mit den richtigen/optimalen Zugriffs-Pfanden (Indices).
    Deshalb gilt bei SQL immer analysieren, bevor das Ganze in Echt geht.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL und OBJLCK
    By malzusrex in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 19-09-06, 11:04
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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