[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.114

    Hä?

    Zitat Zitat von BenderD Beitrag anzeigen
    Hallo,


    PS für die Ketzter, die ansonsten meine Sympathie genießen: Keyfelder ohne semantischen Inhalt haben den Vorteil, dass bei Änderung Referenzen erhalten bleiben (im Beispiel: Zusammenfasssung zweier Aufträge zu einem)

    Was heißt bitteschön semantischer Inhalt? Also ein Keyfeld ohne Inhalt gibt es für mich nicht. Entweder es steht was drin was auch immer oder es ist leer. Leere Felder ergeben aber keinen Sinn für einen Zugriffs-Schlüssel.

    Kann ja sein das ich altmodisch bin aber der Formulierung konnt ich nicht wirklich folgen.

    Gruß
    Gregor

  2. #2
    Registriert seit
    Oct 2003
    Beiträge
    117
    @DBender:
    Danke für den Fahrplan, so in etwa hatte ich mir das vorgestellt. Das Blocken lass ich erst einmal, aber auf den Rest werde ich mich jetzt stürzen.

    @KingofKning:
    Ich hatte auch schon die Befürchtung, dass mich niemand versteht, wenn ich Keyfelder ohne Inhalt will. Klar ist eine fortlaufende Nummer auch Inhalt. Mit Inhalt meinte ich verschlüsselte Daten (Auftragsnummer, Jahr, Status, was auch immer...), die immer wieder Probleme machen, wenn sich an den Daten etwas ändert, z.B. Feldlänge.

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.368
    @KingofKning: ohne semantischen Inhalt meint: mit Inhalt, ohne Bedeutung (siehe auch unter Semantik in Wikipedia), manchmal nennt man sowas auch Kunstkeys.
    @Allrounder: auf meiner Open Source Seite ist da ein Beispiel als SQL Procedure und im MM gabs da auch mal einen Artikel von mir dazu.

    Dieter Bender

    Zitat Zitat von KingofKning Beitrag anzeigen
    Was heißt bitteschön semantischer Inhalt? Also ein Keyfeld ohne Inhalt gibt es für mich nicht. Entweder es steht was drin was auch immer oder es ist leer. Leere Felder ergeben aber keinen Sinn für einen Zugriffs-Schlüssel.

    Kann ja sein das ich altmodisch bin aber der Formulierung konnt ich nicht wirklich folgen.

    Gruß
    Gregor
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Oct 2003
    Beiträge
    117
    Habe ich schon entdeckt. Das ist genau das, was ich brauche, super.

    Eine Frage noch:
    Die UDF GET_KEY schreibt erst eine neue, um eins erhöhte ID und liest diese im nächsten select-Statement aus und gibt sie zurück.
    Gibt die UDF nicht den falschen Wert zurück, wenn ein zweiter Update (Zweiter UDF-Aufruf) erfolgt, bevor der select durchgeführt ist?

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.368
    das ganze muss unter Commit laufen (was es bei mir immer tut), dann bleibt der Satz gesperrt bis zum Ende der Transaktion. Wenn du in der Applikation kein Commit hast, kannst du das auch als Service Programm mit embedded SQL bauen, dem Service Programm eine eigene benamte ACTGRP verpassen und in der Function selber commit sagen.
    Das schreiben vor dem lesen ist ein einfacher Weg um einen Deadlock durch die Eskalation von Sperren zu vermeiden.

    B*D

    Zitat Zitat von Allrounder Beitrag anzeigen
    Habe ich schon entdeckt. Das ist genau das, was ich brauche, super.

    Eine Frage noch:
    Die UDF GET_KEY schreibt erst eine neue, um eins erhöhte ID und liest diese im nächsten select-Statement aus und gibt sie zurück.
    Gibt die UDF nicht den falschen Wert zurück, wenn ein zweiter Update (Zweiter UDF-Aufruf) erfolgt, bevor der select durchgeführt ist?
    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
    Oct 2003
    Beiträge
    117
    Zitat Zitat von BenderD Beitrag anzeigen
    das ganze muss unter Commit laufen (was es bei mir immer tut), dann bleibt der Satz gesperrt bis zum Ende der Transaktion. Wenn du in der Applikation kein Commit hast, kannst du das auch als Service Programm mit embedded SQL bauen, dem Service Programm eine eigene benamte ACTGRP verpassen und in der Function selber commit sagen.
    Das schreiben vor dem lesen ist ein einfacher Weg um einen Deadlock durch die Eskalation von Sperren zu vermeiden.

    B*D
    Die Tabelle ist erstellt, die UDF auch. Ein direkter erster Testaufruf der UDF embedded SQL aus RPG(OPM) hat prima funktioniert, die ID wird fortgeschrieben. Sorgen macht mir nur noch der Härtetest, mehrere zeitgleiche Zugriffe.

    Als UDF-Neuling weiß ich nicht, ob die UDF in einer Transaktion läuft. Das Commit am Ende der UDF wird vom Navigator abgeblockt. Service-Programme habe ich bisher vermieden, weil ich noch keine Erfahrung damit habe. Würde eine eigene ACTGRP heißen, dass die UDF immer höchstens einmal aktiv ist?

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.368
    Hallo,

    die Variante mit Blockweisem ziehen der Keynummern (immer 50 auf einmal hochaddieren) ist im absoluten Highperformance Test bewährt (bis zu 30 Batchjobs laufen parallel und bringen die Kiste mit allen Prozessoren zum qualmen.
    So wie das jetzt erstellt ist, läuft die UDF in der Transaktion des aufrufenden Programmes, sprich: wenn selbiges ohne Commit arbeitet, funzt das nicht (dann bleibt der Satz gesperrt und es kann nur einer und am Ende des Jobs kommt dann ein Rollback.
    Bei der Serviceprogramm Variante bewirkt die benamte Activation Group, dass das SRVPGM einen eigenen Commit Scope bekommt und dann macht man in dem SRVPGM den Commit und das drumherumliegende Programm hat da nichts mit zu tun.

    D*B

    Zitat Zitat von Allrounder Beitrag anzeigen
    Die Tabelle ist erstellt, die UDF auch. Ein direkter erster Testaufruf der UDF embedded SQL aus RPG(OPM) hat prima funktioniert, die ID wird fortgeschrieben. Sorgen macht mir nur noch der Härtetest, mehrere zeitgleiche Zugriffe.

    Als UDF-Neuling weiß ich nicht, ob die UDF in einer Transaktion läuft. Das Commit am Ende der UDF wird vom Navigator abgeblockt. Service-Programme habe ich bisher vermieden, weil ich noch keine Erfahrung damit habe. Würde eine eigene ACTGRP heißen, dass die UDF immer höchstens einmal aktiv ist?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    Registriert seit
    Oct 2003
    Beiträge
    117
    Erst einmal vielen Dank für die umfangreiche Hilfe. Jetzt hab ich's wohl kapiert. *CALLER macht in dem Fall wirklich keinen Sinn. Leider lässt sich mit UPDSRVPGM die Aktivierungsgruppe der UDF nicht ändern: "Programm oder Serviceprogramm verfügt nicht über eine benannte Aktivierungsgruppe." Ich muss wohl ein RPG-Serviceprogramm mit eigener Aktivierungsgruppe erstellen, dass die UDF embedded aufruft, ein Commit absetzt und die ID zurückgibt. Richtig? ... Hoffentlich ;-)

  9. #9
    Registriert seit
    Oct 2003
    Beiträge
    117
    Es läuft!!! Habe eine RPG-Prozedur geschrieben, den Code der UDF in die Prozedur kopiert (embedded). Die Prozedur bekommt Tabellenname und Feld und gibt die ID zurück incl. commit. Das ganze ist jetzt eingebunden in einem Service-Programm mit eigener Aktivierungsgruppe. Wenn die letzten Tests noch erfolgreich sind, kann ich zum 2.1. damit in Echtbetrieb gehen. Vielen Dank B*D!

Similar Threads

  1. Antworten: 11
    Letzter Beitrag: 18-07-16, 09:49
  2. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  3. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  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
  •