[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2001
    Beiträge
    46

    Unhappy EMBEDDED SQL in RPG

    Wer hat eine Idee, wie ich mein Problem bzgl. embedded SQL in RPG lösen kann.

    Da ich im Bereich SQL ein Anfänger bin, stosse ich auf Probleme, die vermutlich für erfahrerene SQL-Anwender gar keine sind.

    Es geht um folgendes:
    In einer DECLARE-Anweisung wird ein Select über Felder von 3 Dateien durchgeführt. Dazu gibt es umfangreiche, aber eigentlich nicht schwierige WHERE-Bedingungen, in der Feldinhalte dieser Dateien verglichen werden und Vergleiche mit über UDS im RPG-Programme eingelesenen Feldinhalten erfolgen.
    Nach Beendigung des DECLARES frage ich den SQLCOD ab, ob dieser ungleich 0 ist.

    Hier bricht das Programm ab mit RNQ0103
    "Ergebnis war ein Wert, der für das Ziel zu gross ist".

    Bringe ich vorab den Inhalt von SQLCOD mit
    Z-ADD in eine andere Variable und lasse mir diese mit DSPLY anzeigen, so hat diese den Wert: 077952576. Diesen Fehler-Code kann ich nirgendswo finden.

    Wenn ich vor der Abfrage des SQLCOD diesen auf 0 setzte, so läuft das Programm weiter und das Ergebnis scheint, soweit ich erkennen kann, richtig zu sein.

    Ungefähr dieselben Anweisungen als SELECT über STRSQL eingetippt, laufen richtig.

    Worauf weist der Code 077952576 hin ?

    Ich hoffe, jemand kann mir weiterhelfen.
    mfg. Ludger.

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873

    Post

    Hallo Ludger,

    wenn Du Dateien in RPG mittels SQL-Verarbeiten willst, musst Du folgende Schritte durchfürhren.
    1. Cursor deklarieren
    2. Cursor öffnen
    3. Daten einlesen
    --> erst jetzt wird der SQLCOD gesetzt
    4. Cursor schliessen

    Statisches SQL:
    C/EXEC SQL
    C+ Declare $SQLC1 Cursor for
    C+ Select ......
    C/END-EXEC

    C/EXEC SQL
    C+ Open $SQLC1
    C/END-EXEC

    C do *Hival
    C/EXEC SQL
    C+ Fetch $SQLC1 into SSQL
    C/END-EXEC

    C if SQLCOD = 100 last Record
    C leave
    C endif
    * C if SQLCOD < 0 Fehler
    C eval $Error = 1 Fehler
    C leave
    C endif

    Verarbeitung

    C enddo
    C/EXEC SQL
    C+ Close $SQLC1
    C/END-EXEC

    B.Hauser


    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

  3. #3
    Registriert seit
    Mar 2001
    Beiträge
    46

    Post

    Vielen Dank B.Hauser für die prompte und ausführliche Antwort.

    Wenn ich dich richtig verstanden habe, so kann der SQLCOD beim DECLARE gar nicht abgefragt werden, sondern erst nach dem FETCH.
    Das ist interessant.

    Gibt es denn auch Möglichkeiten, einen evtl. SQL-Fehler beim DECLARE zu erkennen oder ist das gar nicht erforderlich ?

    mfg. Ludger

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236

    Post

    Beim DECLARE ist das nicht erforderlich, da der PreCompiler bereits einen vollständigen Syntax-Check durchführt.
    Andere Fehler KÖNNEN erst zur Laufzeit, sprich nach OPEN bzw. FETCH auftreten (CLOSE nicht vergessen).

    Einen DECLARE / OPEN / FETCH / CLOSE benötigst du nicht, wenn der Select nur 1 Datensatz zurück gibt.
    In diesem Fall reicht ein:

    SELECT F1, F2, F3, ... into :F1, :F2, :F3, ...

    Selbst wenn mehrere Sätze erwartet werden, kann eine Struktur verwendet werden:

    ISTRU_____DS______10
    I_______________1__5_F1
    I_______________6_10_F2
    :
    :

    SELECT F1, F2 into STRU ....

    Es dürfen allerdings nicht mehr Sätze herauskommen als über die Struktur definiert sind.
    Die Sätze können dann über die OCUR-Anweisung angesprochen werden.
    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. embedded SQL in RPG
    By muadeep in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 03-08-06, 13:25
  2. RPG mit Embedded SQL, JOIN ..
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 18-06-06, 12:14
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. Embedded SQL in RPG
    By lossin in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 23-08-05, 12:00
  5. embedded SQL in ILE RPG, UPDATE
    By Zupfl50 in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 06-10-04, 21:04

Berechtigungen

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