[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    DDS Select / Omit

    Irgendwie stehe ich auf dem Schlauch.Ich möchte nur bestimmte Sätze in der LF haben.
    A*____ K TETENR
    A*____ S TESTS COMP(EQ 0)
    A*____ TEFA COMP(EQ 1)
    A* ____ TEST01 COMP(GE 20)
    A* ____ TEST01 COMP(LE 699)
    A* ____ S TEST11 COMP(EQ 50)
    A*____ TEST11 COMP(EQ 53)
    A*____ TEST11 COMP(EQ 58)
    A*____ TEST11 COMP(EQ 100)
    A*____ TEST11 COMP(EQ 101)

    Ich bekomme hier aber auch Sätze mit Test11 = 120. Wo ist denn mein Denkfehler?

    GG

  2. #2
    Registriert seit
    Dec 2004
    Beiträge
    203
    Auf den ersten schnellen Blick würde ich sagen das der erste Select diese Sätze enthällt.
    Gruß,
    Ralf

  3. #3
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    das entspricht nunmal einem
    ... where tests=0 and tefa=1 and test01 between 20 and 699 or
    test11 = 50 and test11=53 and test11=58 and test11=100 and test11=101

    also werden deine test11 = 120 Sätze die 1. Bedingung erfüllen

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    62
    Hallo
    wenn ich das übersetzte bedeutet dies:

    (tests = 0 und tefa = 1 und test01 >= 20 und test01 <= 699) oder
    (test11 = 50 und test11 = 53 und test11 = 58 und test11 = 100 und test11 = 101)

    Die zweite Zeile dürfte niemal zutreffen, da test11 =50 und test11 =53 gleichzeoting nicht sein kann.

    Ein satz mit tests = 0 tefa =1 test01 21 und test11 = 120 würde in der logischen Datei erscheinen.
    Da die erste Zeile zutrifft

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Das Problem ist tatsächlich, dass du in DDS die Bedingung nicht schachteln kannst.
    Die 2. Bedingung wird, wie schon gesagt nie zutreffen.
    Für die 2. Bedingung, wenn da die anderen Felder nicht benötigt werden, musst du jedes mal wieder mit dem "S" für "or" beginnen.

    Für deine 120 muss aber auch "tests=0 and tefa=1" gelten.
    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

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    385
    Stelle vor den anderen TEST11 auch noch das 'S' für SELECT dann sollte es gehen...
    Ansonsten ist ein CREATE VIEW auch eine gern genomnene Sache...

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Views haben keinen Schlüssel, deshalb sind sie für native I/O nur eingeschränkt einsetzbar.

    Wenn KingOfKing auf Release 6.1 oder höher wäre, würde ich einen (derived and sparsed) SQL-Index vorschlagen.
    Bei diesen Indices können Spalten ausgewählt, neue Spalten generiert werden (u.a. auch unter Verwendung von skalaren funktionen).
    Daneben können WHERE-Bedingungen (das Äquivalent zu SELECT/OMIT-Anweisungen nur mächtiger, da die SQL-Syntax verwendet wird und damit u.a. auch Klammern gesetzt werden können) hinzugefügt werden.

    SQL Indices können zwar in SQL-Statements nicht angegeben werden, wohl aber mit native I/O wie jede beliebige geschlüsselte DDS-beschriebene logische Datei verwendet 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

  8. #8
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Tja, das mit dem S vor den anderen hatte ich schon probiert, führt aber zu der Fehlermeldung "Doppelte Schlüsselwerte".

    Da ich die Datei in Cobol bearbeiten will, muß ich eine LF haben.

    Ansonsten müßte ich den Zugriff auf SQL umstellen.
    Habe mir zwar den interessanten Vortrag von Herrn Bender angehört, aber noch keine Zeit das umzusetzen.

    Ich finde es aber erstaunlich das es nicht möglich ist im DDS zu sagen "Nur die Sätze auf die alle Bedingungen zu treffen zu selektieren".

    Nun ja, muß ich halt in Cobol schauen wie ich es mache.

    GG

  9. #9
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Ich finde es aber erstaunlich das es nicht möglich ist im DDS zu sagen "Nur die Sätze auf die alle Bedingungen zu treffen zu selektieren".
    DDS ist eine veraltetete Technologie und wird schon seit mindestens 4 Releasen nicht mehr weiterentwickelt. Deshalb haben wir ja die ganzen Neuerungen in Release 6.1 für die SQL Indices erhalten. (Übrigens unter 6.1 war diese Erweiterung in erster Linie nur für native I/O erst mit 7.1 konnte dann die SQE diese Zugriffspfade teilweise verwenden!).

    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

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von KingofKning Beitrag anzeigen
    Ansonsten müßte ich den Zugriff auf SQL umstellen.
    ...
    Nun ja, muß ich halt in Cobol schauen wie ich es mache.

    GG
    ... das mit dem SQL ist sicherllich die nachhaltigere Lösung.
    Alternativ gibt es noch zwei Varianten:
    - OPNQRYF
    - alle lesen und filtern
    @OPNQRYF: ist zwar weniger schön als SQL und ein wenig tricky, aber ich würde das logischen mit select ommit allemal vorziehen, insbesondere dann, wenn ich viele solcher Ungetüme kriege und im Mix mit SQL fahre.
    Wenn die Selektivität unter 20 % (vieleicht auch 10%) liegt, würde ich insbesondere bei read only (wo man ja blocken kann) alles lesen und durch einen Filter rattern lassen, das ist dann auch am effektivsten.

    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/

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wenn doppelte Schlüssel vorkommen können, lass das UNIQUE doch weg.
    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

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.306
    Es gibt nicht nur S für SELECT sondern auch noch O für OMIT.

Similar Threads

  1. SELECT..FOR UPDATE/Embedded SQL
    By KB in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 28-04-16, 14:42
  2. SQL SELECT Problem ?
    By a.wojcik in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 06-02-14, 13:29
  3. SQL Select
    By TARASIK in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 19-09-02, 10:59
  4. SELECT auf Datei mit Dateiendung
    By LaLeLi in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 13-06-02, 12:41
  5. SQL SELECT mit Endsumme ?
    By Schnichels in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-01-02, 13:45

Berechtigungen

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