[NEWSboard IBMi Forum]
Seite 4 von 4 Erste ... 3 4
  1. #37
    Registriert seit
    Sep 2004
    Beiträge
    327
    Guten Morgen,
    noch eine Frage:
    Wegen der dynamischen LIB habe ich eine Variable tablename definiert und wollte diese in exec sql einbinde, leider motzt der Precompiler.

    c/exec sql
    c+ update :tablename set changerid = :W_userid
    c+ where id = :W_Id
    c/end-exec

    :tablename wird durch den precompiler angemotzt.
    SQL0104 30 171 Position 16 Token : was not valid. Valid tokens:

    Eventuell muss ich den kompletten SQl String in eine Variable packen?
    c/exec sql
    c+ execute immediate :W_Sql
    c/end-exec


    Danke.

  2. #38
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... das ist eigentlich SQL Basiswissen, Dateinamen, Feldnamen, etc müssen bei static SQL zur Umwandlungszeit feststehen. Ansonsten dynymic mit prepare und execute using.

    prepString = 'update ' + tablename + ' set afield = ? where somefield = ?';
    exec sql prepare myStatement from repString;
    exec sql execute myStatement using :afield, :somefield;

    D*B

    PS: Margery (AKA die allwissende Müllhalde, alias google) hat zahlreiche Beispiele für prepare execute und warum man Parameter Markers verwenden soll.
    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. #39
    Registriert seit
    Sep 2004
    Beiträge
    327
    @Dieter, vielen Dank.
    Eine Frage noch zu JVAGATE.
    Wenn wir bei der fernen DB Sätze sperren und der User zum Beispiel blöderweise das X drückt, dann kommt das Programm nicht in die PSSR und die Sätze bleiben gesperrt und zwar solange bis JVAGATE beendet ist (läuft bei uns als ASYNC JOB).
    Gibt es hier eine bessere Lösung, sprich eventuell über einen Timeout konfigurierbar in der JVAGATE Config Datei?
    Danke.
    Klaus

  4. #40
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dann ist das Design fehlerhaft.
    Innerhalb einer Transaktion darf es nicht zu einer Userinteraktion kommen.
    Also alles mit Monitor umschließen und mit Commit bei OK sowie Rollback bei Fehler beenden.
    Damit kann keine Sperre offenbleiben, denn beim Lesen wird nichts gesperrt.
    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. #41
    Registriert seit
    Sep 2004
    Beiträge
    327
    Wir sperren auch die zu lesenden Sätze, weil wir nicht ausschließen können, dass jemand vom fremden System etwas an den Sätzen macht (select ... for update). Wir haben das getestet und die Sätze blieben offen, wenn der JOB sich ohne PSSR verabschiedete. Ja, bei Update, Insert kann das nicht passieren. Da muss ein Monitor drum herum, bzw. in der PSSR der ROLLBACK rein.
    Beim Beenden von JVAGATE sind die Sätze wieder frei. Daher gibt es vlt. auch eine Art Timeout. Wird der Timeout erreicht, dann werden die Sätze freigegeben.

  6. #42
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nein da gibts nichts. Wenn ihr einen Async-Job habt, sollte bei Sperren eine regelmäßige Prüfung des Asyncjobs stattfinden, ob der Job, der die Sperre ja setzt, noch aktiv ist.
    Dafür gibts die Table-Function ACTIVE_JOB_INFO um das schnell auszuwerten.
    Dies kann der Asyncjob ja alle x Sekunden prüfen, da ein QRCVDTAQ auch einen Timeout erlaubt.

    Allerdings kann eine Satzsperre bei Fremdsystemen über einen längeren Zeitraum zu schweren Fehlern der daran hängenden anderen Apps führen. Bei der IBM i gibts einen Lock-Timeout, beim SQL-Server z.B. einen infinitive wait.
    Konzeptionell, ich muss das sagen, ist das ein Schwachpunkt.

    Generell ist zu empfehlen:
    - Daten lesen ohne Sperre für die Anzeige
    - Useraktion abwarten
    - Daten lesen mit Sperre und die Voraussetzungen noch mal prüfen
    - falls nicht OK dann Rollback mit Hinweis an den User
    - falls OK dann verarbeiten und Commit.
    Damit können andere machen was sie wollen, da auf Veränderungen zum Transaktionszeitpunkt reagiert werden kann.
    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. #43
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von itec01 Beitrag anzeigen
    @Dieter, vielen Dank.
    Eine Frage noch zu JVAGATE.
    Wenn wir bei der fernen DB Sätze sperren und der User zum Beispiel blöderweise das X drückt, dann kommt das Programm nicht in die PSSR und die Sätze bleiben gesperrt und zwar solange bis JVAGATE beendet ist (läuft bei uns als ASYNC JOB).
    Gibt es hier eine bessere Lösung, sprich eventuell über einen Timeout konfigurierbar in der JVAGATE Config Datei?
    Danke.
    Klaus
    ... ArdGate macht genau das, was ihm gesagt wird , das Verhalten bei Satzsperren hängt von der spezifischen Datenbank ab und kann über Treibereinstellungen modifiziert werden. Beim Jobende schickt die Datenbank der AS400 ein Rollback hinterher und sowohl lokale als auch remote Satzsperren werden freigegeben. Was hängen bleibt, ist die Connection, auch hier kann es Einstellungen beim treiber geben.

    Bei sauberer Vorgehensweise erledigt man das im Programm durch Registrierung eines Exit Handlers, der beim Ende der Aktivierungsgruppe vom System aufgerufen wird (Beispiele in allen JVAGATE RPG Programmen) und den disconnect durchführt.

    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. JVAGATE mit Sonderzeichen in CHAR-Feldern
    By Peet in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 16-04-20, 14:02
  2. JVAGATE und SQLRPG auf lokale DB2 for i
    By Peet in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 25-06-19, 11:59
  3. jvagate Bander tool Verbindung -> Oracle Hilfee
    By labm in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 05-06-18, 09:09
  4. Problem mit JVAGATE von D.Bender
    By svit in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 18-09-14, 12:14
  5. aktuelle Liste aller offenen Commits je DB
    By itec01 in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 08-07-14, 11:17

Tags for this Thread

Berechtigungen

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