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

    Angry Releasewechsel von V5R4 auf V7R1 auf der Kippe?

    Moin,

    wir planen den Umstieg auf das Release V7R1 und haben hierzu eine Testmaschine zur Verfügung gestellt, auf der unsere IT ihre technsichen Programmtests laufen lässt.

    Jetzt sind wir auf einige Probleme gestoßen, die unter V5R4 nicht auftraten:

    1.) Eine SQL Anweisung funktioniert nicht mehr:
    - eine Tabelle "TEST" enhtält eine Spalte (FIELD1) die als INTEGER definiert ist

    select * from test where field1 > ' ' resultiert in einem "Umsetzungsfehler bei Variable oder Parameter *N."

    Dieses Select kann leider von uns nicht angepasst werden, da es eine Kaufsoftware ist, die nicht mehr supported wird.

    Weiß jemand ob hier was am impliziten cast geändert wurde, oder sowas überhaupt konfigurierbar ist??

    2.) Eine 2 Phase commit funktioniert bei einer Stored Procedure nicht mehr und bricht mit einer "class java.sql.SQLException: Cursor state not valid" ab:

    Der Aufruf der Stored Procedure schlägt lediglich innerhalb einer 2-Phase-Commit Transaktion (Treiberklasse: com.ibm.as400.access.AS400JDBCXADataSource) fehl, nicht in einer 1-Phase-Commit Transaktion (Treiberklasse: com.ibm.as400.access.AS400JDBCConnectionPoolDataSo urce).
    In unseren Application Servern setzen wir 2-Phase-Commit Transaktionen ein.

    Die Stored Procedure ist unter V5R4 wie folgt erstellt worden und funktioniert dort tadellos:

    CREATE PROCEDURE PGM/MYPGM(IN P1 CHAR ( 3), IN P2 CHAR
    (2 )) NOT DETERMINISTIC READS SQL DATA EXTERNAL NAME MYPGM
    PARAMETER STYLE GENERAL WITH NULLS

    CRTSQLRPGI OBJ(PGM/MYPGM) SRCFILE(PGMSRC/QRPGLESRC) COMMIT(
    *NONE)
    OUTPUT(*PRINT) OPTION(*XREF *SEQSRC) CLOSQLCSR(*ENDMOD) DBGVIEW(
    *SOURCE)


    Über den ein oder anderen Rat / Tipp würde ich mich freuen...

    Schönes Wochenende
    Gruß Max

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo Max,

    @1: Ab 7.1 wird strenger geprüft. Was zuvor nur eine Warnung war, ist jetzt ein Fehler.
    In diesem Forum gab es auch schon andere mit dem gleichen Problem.

    @2: Hattet ihr unter V5R4 vielleicht default Werte beim Kompelieren?
    Vergleich mal mit DSPSRVPGM / DSPPGM die Attribute auf beiden Systemen.

    lg Andreas

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Zu 1)
    Da gibts keine Umgehung.
    Du kannst zwar eine View mit einem cast auf DIGITS darüberlegen, ebr wer weiß schon was sonst noch damit genacht werden wenn das Ergebnis dann nicht in die Hostvariable passt wegen Umsetzungsfehler.

    zu 2)
    Hier muss man schon noch den Cursor-Status prüfen.
    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 2006
    Beiträge
    111
    Hallo Baldur,

    zu 2) hätte ich noch einige Rückfragen.

    Auf welcher Seite soll der Cursor geprüft werden (Procedure oder Aufrufer) und hat der Aufrufer überhaupt eine Chance den Cursor zu prüfen, wenn ja wie?

    Gruß
    Max

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... ich habe zu 1 zwar keine Erfahrungswerte (da ich solchen Murks nicht mache und ausbaue, wenn er mir vor die Füße läuft), aber hat da mal jemand probiert SQL_DECFLOAT_WARNINGS auf *YES zu setzen?

    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.241
    Zu 1)
    Da die Tabelle ja "TEST" heißt, nehme ich mal an, dass dies nur ein Test-SQL ist und die Tabelle keine relevanten Daten hat.

    zu 2)
    Da deine Procedure mittels COMMIT(*NONE) definiert ist, und V7 jetzt wohl restriktiver prüft, ist ein 2-Phase-Commit nicht möglich. Schließlich ist für deine Procedure kein Commit erforderlich und wird deshalb wohl abgelehnt (keine Commit-Definition aktiv).
    Entweder die Procedure auf COMMIT(*CHG) anpassen incl. Journalisierung der betroffenen Dateien oder dein Java so anpassen, dass für die Procedure kein Commit durchgeführt 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

  7. #7
    Registriert seit
    Jan 2006
    Beiträge
    111
    @Dieter: wie bereits erwähnt, es handelt sich hierbei um eine Kaufsoftware - die hantiert mit Scripten rum, worin beschrieben ist, wie auf die DB Zugegriffen wird --> wie das SQL zusammengefummelt wird kann ich nicht beeinflussen. Klar ist sowas murks...

    @Baldur:
    zu 1) es handelt sich schon um eine Produktivtabelle, habe sie lediglich hier als TEST deklariert

    zu 2) COMMIT(*CHG) brachte keinen Erfolg und führt zum Cursor-Fehler.
    Die App-Server-Seite zu modifzieren bedeutet böses rumgefrickel.

    Gäbe es sonst noch eine Option?

    Vielleicht ist die Procedure auch das falsche Konzept. Diese existiert nur, um sich eine ID für den nächsten "Write" zu ermitteln. Sowas hätte man damals als auto increment Spalte definieren sollen... Aber nu ist das Kind in den Brunnen gefallen;(

    Anbei noch die Definitionen:

    Code:
    H DECEDIT('0,') DATEDIT(*DMY.) ALWNULL(*USRCTL)  
    H DFTACTGRP(*NO) OPTION(*NODEBUGIO)
    in der Main wird dann ein RPG gecalled, welche die nächste Nummer ermittelt und das Ergebnis zurückliefert:

    Code:
    CALL      'SOMEPGM'                
    PARM                    XXX
    PARM                    XXX   
    PARM                    XXX   
    PARM                    XXX
    
    C* *  Datenstruktur füllen                            
    C     1             OCCUR     DSARRAY1                
    C                   Z-ADD     G_NUMMER      #NUMMER   
     *                                                    
    C/Exec Sql                                            
    C+  SET RESULT SETS FOR RETURN TO CLIENT              
    c+      ARRAY :DSARRAY1 FOR 1 ROWS                    
    C/End-Exec                                            
    C                   MOVE      *ON           *INLR
    Gruß
    Max

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    zu 1)
    Da wirst du leider um eine Anpassung nicht herumkommen. Sonst musst du wohl auf V5R4 bleiben.

    zu 2)
    Mach einfach einen Sequence statt der Procedure:
    create sequence myseq
    select next value for myseq from sysibm.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

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... ich habe gerade nochmal ein wenig rumgespielt:
    a) select * from myTable where myInt > ''
    b) select * from myTable where myInt > ' '
    c) select * from myTable where myInt > '0'
    Variante c geht auf Oracle, MS SQL, MySQL und Firebird
    Oracle: a kein Fehler (wird als null interpretiert), leere Menge; b Fehler
    MS SQL: a und b Fehler
    MySQL beide kein Fehler, wird als 0 interpretiert
    Firebird beide kein Fehler, wird als null interpretiert

    D*B

    Summa Summarum: der SQL Standard legt das Verhalten nicht fest => Meldung Software defekt an IBM, da Kompatibilität gebrochen wird!!!
    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
    Jan 2006
    Beiträge
    111
    @Baldur: Sequence bedeutet richtig viel Aufwand, da sämtliche Programme, die in diese Datei schreiben angepasst werden müssten... (RPG Sourcen als auch Java-Umwelt)

    Wer hätte damals gedacht, dass eine Hausgemachte ID - Generierung einem richtig böse auf die Füße fallen würde.

    Sonst noch Hinweise, die die Procedure am Leben erhalten könnten?

    Gruß
    Max

  11. #11
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Meines erachtens dürfte das COMMIT *NONE keine Probleme machen. Das PGM würde halt außerhalb der Transaktion laufen und dürfte darauf keinen Einfluss haben.

    Probiere testhalber das PGM mit DFTACTGRP(*NEW) zu erstellen.

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    *NEW ist bei SQL-Aufruf eher die schlechte Variante, ins besonders wenn mit *INLR = *OFF verlassen wird.
    Aber eine explicit benannte eigene ACTGRP könnte gelingen, da diese eigene Commit-Definitionen hat.
    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. iSeries V5R4 Systemstart
    By roti in forum NEWSboard Server Software
    Antworten: 2
    Letzter Beitrag: 17-02-14, 11:23
  2. V5R4
    By dino in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 18-12-13, 13:59
  3. V5R4 -> V7R1, Problem mit Trigger-Programmen
    By programmer400 in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 03-12-13, 14:19
  4. neue Maschine, V7R1, IFS
    By programmer400 in forum IBM i Hauptforum
    Antworten: 16
    Letzter Beitrag: 19-11-13, 11:05
  5. Java auf V5R4 Performance
    By TR1 in forum NEWSboard Java
    Antworten: 1
    Letzter Beitrag: 02-11-13, 14:02

Tags for this Thread

Berechtigungen

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