[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.250
    Es kommt kein negativer SQLCODE im ODBC-Treiber an.

    "SQL Query changes in collation of errors might result in a SQL0802"
    Ich interpretiere dies so, dass nun zusätzliche SQL0802 ausgelöst werden können, die vorher nicht erwartet wurden.
    SQL0802 führt aber normalerweise zum Abbruch der Abfrage weil die Daten auf Grund des Dezimalfehlers nicht korrekt sein können und auch nicht sind!

    select dec(10000, 3, 0) from sysibm/sysdummy1

    Diese Abfrage führt zu einem gültigen Resultset mit NULL als Ergebnis!

    Die Sache ist sogar noch viel schlimmer als ursprünglich gedacht.

    Eine ODBC-Abfrage soll Datensätze laden.
    Es kamen jedoch nur ca. 30.000 Datensätze an.
    Bei der Analyse der Daten stellte man fest, dass Datensätze einfach fehlten.
    Durch Ergänzung der Where-Klausel auf die fehlenden Sätze (nur so als Versuch) wurden diese nun auch tatsächlich geladen.
    Nun kam ich ins Spiel, da man sich dies nicht erklären konnte.
    Auffällig war zu erst mal, dass die Abfrage unheimlich lange benötigte.
    Auf Grund dieser Performance habe ich eine Indexanalyse gemacht und den Index angelegt.
    Diesen hat die AS/400 auch genommen und wohl auf Grund der geänderten Sortierfolge wurden nun ca. 42.000 Sätze geladen.
    Allerdings fehlten immer noch jede Menge Daten!
    Da man uns aus SOX-Gründen nicht so einfach auf die Maschine ließ, ging ich den Weg über den Opsnav. Schließlich kann man auch dort SQL's ausführen und es werden die Diagnosenachrichten angezeigt.
    Mittels des OpsNav habe ich nun erstmalig den Dezimalfehler bemerkt, da dieser in der Diagnose auftaucht. Die Sätze selber wurden aber geladen und mit NULL in den relevanten Feldern.
    Jetzt konnte ich erst der Ursache auf den Grund gehen und den Dezimalfehler (es war wie in obigem Beispiel ein CAST-Fehler wenn der Wert zu groß wurde) beheben.

    Der Dezimalfehler trat nun nicht mehr auf, die Abfrage wurde erheblich schneller ausgeführt und es wurden nun 140.000 Sätze geladen!

    Fazit:
    Nicht nur, dass der SQL0802 nicht zum Abbruch führte, es wurde auch ein Großteil der Daten nicht übergeben!
    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

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... aus meiner Sicht ein Fehler des Treibers. Das Sätze geliefert werden und mittendrin was passiert ist normal (es wird satzweise geliefert und weder Treiber noch Datenbank können wissen, dass da noch Schrott kommt), dass die Anzahl der Sätze differieren könnte ist eine Folgerung davon, das mit den falschen Werten ist grenzwertig, liegt aber in der Natur der Sache. Eindeutig falsch ist, dass kein SQLCODE geliefert wird.

    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/

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.250
    Bzgl. der Treiber habe ich nur 2 zur Auswahl, den CA-ODBC-Treiber und den CA-OLEDB-Treiber.
    Beide liefern das selbe Ergebnis.
    Auch der OpsNav (ich denke mal der arbeitet mit JDBC) liefert keine Fehler sondern nur die Daten.
    Mal sehen was der JDBC-Treiber von CA dazu sagt.
    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

  4. #4
    Registriert seit
    Jan 2001
    Beiträge
    835
    Hallo,

    die Meldung -802 kommt auf jeden Fall.

    Eventuell könnte man die MSG und deren Wertigkeit ändern damit es zu einem Abbruch kommt.
    Ist vllt. ein Versuch Wert.

    Gruß
    Michael

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.250
    So, nun habe ich das Problem näher eingekreist und werde einen entsprechenden Fehler an die IBM geben lassen.
    Mit den Microsoft ADO-Objekten habe ich 2 sog. Cursorvarianten:
    ClientCursor = Microsoft lädt alle Daten in das Resultset
    ServerCursor = Die Daten werden erst beim MoveNext abgeholt

    Beim ClientCursor komme ich über den "kaputten" Datensatz nicht hinaus, das ist auch korrekt.
    Beim ServerCursor (in .NET/Java ist das nur der Reader) kann ich alle Daten ohne Fehler lesen, einen SQLState gibt's da nicht, nur den besagten NULL-Wert.
    Nun kann ich die Anwendung nicht auf ClientCursor umstellen, da Millionen Sätze nicht in den Speicher geladen werden können, ganz abgesehen von der dann schlechten Performance.

    Lade ich die Daten nun in Excel mit der normalen Funktion "Externe Daten abrufen" wird weder in MS-Query noch in Excel ein Fehler bemerkt.
    Die Daten sind halt einfach falsch und damit wird dann gearbeitet.
    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
    Feb 2001
    Beiträge
    20.250
    Ich habe das nun auch noch mit SQLRPGLE probiert, der SQLCOD ist 802 und nicht -802!
    Der entsprechende NULL-Anzeiger steht dann auf -2 (Datenverlust).
    ODBC kennt sowas ja nicht und positive SQLCodes sind ja nur Warnungen.
    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
    Feb 2001
    Beiträge
    20.250
    Nun ja, von der IBM gibt's die erste Meldung die allerdings keinen Unterschied brachte.
    Anscheinend kennen die ihre eigenen ODBC-Einstellungen nicht.

    Hat jemand noch Zugriff auf V6R1 und V5R4 um folgenden Befehl z.B. als Excel-Import per ODBC auszuprobieren und das Ergebnis hier zu posten?

    select dec(10000, 3, 0)
    from sysibm/sysdummy1

    Ziel ist, dass dieser einen SQL0802 auslöst, was laut IBM ab V6R1 kein Fehler sondern nur eine Warnung ist, also als positiver SQLCOD gemeldet wird.
    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

  8. #8
    Registriert seit
    Jan 2001
    Beiträge
    835
    HI

    also bei V7R2 wird ein negativer SQLCOD ausgegeben
    SQLCOD = -000000802.

  9. #9
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Nun ja, von der IBM gibt's die erste Meldung die allerdings keinen Unterschied brachte.Anscheinend kennen die ihre eigenen ODBC-Einstellungen nicht.Hat jemand noch Zugriff auf V6R1 und V5R4 um folgenden Befehl z.B. als Excel-Import per ODBC auszuprobieren und das Ergebnis hier zu posten?select dec(10000, 3, 0) from sysibm/sysdummy1 Ziel ist, dass dieser einen SQL0802 auslöst, was laut IBM ab V6R1 kein Fehler sondern nur eine Warnung ist, also als positiver SQLCOD gemeldet wird.
    Also ich bekomme 00001 zurück unter V5R4. Sehe keine Fehlermeldung

    GG

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.250
    Da scheint das bei V7R2 ja wohl behoben zu sein. Mal sehen, wann es das PTF dann für V7R1 gibt.

    Ich habe nun noch mal das Ankündigungsschreiben für V6R1 analysiert:

    3.11.24 SQL Query changes in collation of errors might result in a

    SQL0802

    In PTF MF45590, a change was made to not collate errors for SQL queries

    with distinct or aggregation. This was done to avoid providing wrong

    results when a result in error can not be included in aggregation or

    distinct result sets. A selection error is now signalled in this

    scenario, using the SQL0802 message with SQLCODE=-802 and

    SQLSTATE='22003'. The SQL0802 message will be preceded by CPF5035 and

    CPD4019 escape messages.

    To allow compatibility with previous behavior, a new QAQQINI option,

    COLLATE_ERRORS, is available by PTF.

    COLLATE_ERRORS - Specifies how data errors are handled on the GROUP BY

    and ORDER BY expression during hash or sort processing within queries.

    Supported values:

    * *DEFAULT - The default is *NO.

    * *NO - A value of *NO causes the query to be ended with an error when

    a grouping or ordering expression results in an error.

    * *YES - A value of *YES indicates that the grouping or sort continues.

    Da steht nichts davon das SQL0802 nun positiv gesetzt wird oder verstehe ich da was falsch?
    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
    Feb 2001
    Beiträge
    20.250
    Ich konnte das nun noch mal auf V5R2 ausprobieren (ja, solche Kunden gibt's noch).
    Da kommt tatsächlich auch kein Fehler.
    Das deckt sich mit obiger V5R4-Aussage.

    Gut, hoffe ich mal auf das PTF aus V7R2.
    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
    Jan 2001
    Beiträge
    835
    Hi,

    gearde nochmal mit einem kleinen Progrämmchen auf einem V5R4 und auf einem V7R1 System probiert

    PHP-Code:
    danum             s              3  0    
    dx                s              1       
                                             
    C
    /EXEC SQL                               
    C
    select dec(1000030into :aNum    
    c
    from sysibm/sysdummy1                 
    C
    /END-EXEC                               
                                             
    c     
    'sqlcod'      dsply                
                                             
     
    *                                       
    c                   Eval      *INLR = *ON 
    Beide Systeme liefern den SQLCOD im Debugger
    SQLCOD = -000000802.

    Gruß
    Michael

Similar Threads

  1. XML jetzt ganz einfach ohne PC!
    By andigoering in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 18-05-03, 19:54
  2. Mehrsprachigkeit einfach und schnell
    By Kilianski in forum NEWSboard Server Software
    Antworten: 1
    Letzter Beitrag: 11-10-02, 09:56
  3. iSeries Native-Dateien einfach zum PC senden
    By Kilianski in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 04-10-01, 16:44
  4. Antworten: 0
    Letzter Beitrag: 24-08-01, 16:58
  5. IBM arbeitet an weiterer Miniaturisierung von Chips
    By Burgy Zapp in forum Archiv NEWSblibs
    Antworten: 0
    Letzter Beitrag: 15-03-01, 01:21

Berechtigungen

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