-
Er hat es in einem alten Thread auch nochmal etwas ausführlicher beschrieben.
http://newsolutions.de/forum-systemi...ight=cobol+sql
Wobei ich Deine Konstruktion nicht wirklich verstanden habe.....
GG
-
Hallo Fuerchau
Ich hatte Dir Gestern Abend noch ein mail an Deine Web-Adresse gesandt, aber klar, ist ja Wochenende. Ich bin weitergekommen, aber habe immer noch ein Problem:
Wie gesagt, ich habe nun einen Cursor gesetzt für das Positionieren:
EXEC SQL
DECLARE CRSCTNO CURSOR FOR
SELECT
T01.SHORTN,
T01.CTNO,
T01.NAMPA1
FROM VMKJF25001 T01
WHERE T01.SHORTN >= :SQL-SHORTN
FOR FETCH ONLY
END-EXEC.
Der funktioniert auch prächtig, d.h. ich bekomme den ersten, der grösser/gleich dem SQL-SHORTN ist.
Nun muss ich ab dieser Position weiterlesen. Wenn ich nun einen zweiten Cursor für dieses Weiterlesen definiere
EXEC SQL
DECLARE NXTCTNO CURSOR FOR
SELECT
T02.SHORTN,
T02.CTNO,
T02.NAMPA1
FROM VMKJF25001 T02
ORDER BY SHORTN
FOR FETCH ONLY
END-EXEC.
bekomme ich durch den ORDER BY den ersten der DB, aber nicht den nächsten von dem, den ich mit dem ersten Cursor gelesen habe.
Auch wenn ich den zweiten Cursor mit der WHERE analog dem ersten Cursor ergänze, ändert das nichts, er beginnt wieder vom Anfang der DB, so als ob der ORDER "stärker" als der "WHERE" wäre.
Hättest Du evtl. eine Lösung?
LG Günter
-
?
Der zweite Cursor hat ja keinen Bezug zum ersten.
However, wenn ich Deine Frage richtig verstehe, dann benötigst Du nur den zweiten(!) Cursor, da muss das WHERE und ORDER BY angegeben sein und Du kannst alle gewünschten Sätze nacheinander einlesen.
Wenn das nicht funktioniert, hast Du irgendwo einen anderen fehler!
-
Wieso einen 2. Cursor?
Du musst folgendes vergleichen:
DECLARE MYCURSOR FOR ... = SELECT in Cobol
OPEN MYCURSOR = OPEN in Cobol + START
FETCH = Read next in Cobol
CLOSE = CLOSE in Cobol
In Native IO würdest du doch auch nicht ständig Open/Start/Read/Close machen oder?
Genauso ist das in SQL.
1 mal OPEN
n mal FETCH
1 mal CLOSE
Hier kommt dann die Variable SQLCODE ins Spiel (les doch mal das Handbuch!).
SQLCODE = ZERO => immer alles OK
SQLCODE = 100 => entspricht READ ... AT END ...
SQLCODE < ZERO => entspricht Filestatus, Fehler mit Abbruch in den SQL's
SQLCODE > ZERO => entspricht Filestatus, Fehler mit Warnung in den SQL's, weitermachen möglich
-
Hallo miteinander
Also ich habe jetzt auf nur noch einen Cursor umgestellt.
EXEC SQL
DECLARE CRSCTNO CURSOR FOR
SELECT
T01.SHORTN,
T01.CTNO,
T01.NAMPA1
FROM VMKJF25001 T01
WHERE T01.SHORTN >= :SQL-SHORTN
ORDER BY SHORTN
FOR FETCH ONLY
END-EXEC.
Dann rufe ich diesen Cursor auf und bereits beim ersten Aufruf bringt er mir nicht den ersten, der grösser als das SQL-SHORTN ist, sondern den ersten, der vorhanden ist (a, etc). Wenn ich den ORDER BY wegnehme, bringt er mir den gewünschten, aber die nachfolgenden halt nicht in der Reihenfolge des SHORTN
Ich habe das alles mit Displays entsprechend dokumentiert
-
Noch etwas
Ich bin ja Pragmatiker, d.h. ich habe jetzt einen Loop eingebaut, dass er selbst bis auf den gewünschten liest, erst dann beginnt meine eigentliche Verarbeitung. Das funktioniert auch soweit, obwohl es natürlich nicht schön ist. Wenn ich dann aber auf einen Wert selektieren möchte der vor der aktuellen Position liegt, funktioniert das wieder nicht, lediglich die Selektion auf einen Wert grösser als die momentne Position funktioniert. Ich könnte jetzt natürlich bei einem Wert kleiner als meine Position einen Close und Open machen, denke, dann geht es auch wieder, aber irgendwie sehr unschön !!!!!
-
Dein SQL sieht vollkommen richtig aus!
Der Fehler muss woanders liegen.
Wie ist die Feldbeschreibung von SHORTN?
Wie ist der Feldinhalt von SQL-SHORTN?
Welcher Wert sollte nach dem ersten Lesen in SHORTN stehen?
usw..
-
Also ich sag mal wenn Du das SQL interaktiv aufrufst, dann sollte das Ergebnis das selbe sein wie wenn Du es im Programm machst.
Am besten Du postest mal das Programm, dann kann man sehen ob Du evtl. einen Fehler im nachhinein oder im Vorraus machst.
Evtl. dadurch das Du am Anfang dachtest du bräuchtest 2 Cursors und deswegen arbeitets Du evtl mit den falschen Variablen.
STRDBG kann Dein Freund sein.
Wobei ich so etwas auch immer kapseln würde. Sprich alle Datenbankaufrufe kommen in ein Modul und werden von außen aufgerufen. Dann ist es mir egal ob innendrinn SQL arbeitet oder normales COBOL START / Read Next etc.
GG
-
Als erstes einmal vielen Dank an alle, die mir geholfen haben. Ich bin halt nicht nur im AS400 ein Neuling, sondern habe auch im SQL relativ wenig Erfahrung. Aber jetzt läuft alles korrekt und bringt die richtigen Ergebnisse. Ich denke mal, durch das Cursor-Setzen kann ich nur sequentiell weiterlesen. Ein Aufsetzen vor der aktuellen Position habe ich nur erreicht, indem ich ein Close und Open gemacht habe. Beim SHORTN handelt es sich um ein 12-stelliges Feld, das zudem wahrscheinlich ein Key ist.
LG Günter
-
Gaaaanz dumme Frage
Wie gebe ich denn ein neues Thema für das Forum ein????
-
Wähle ein Forum aus (z.B. dieses).
Bei mir steht dann oben eine dicke Schaltfläche "Thema erstellen".
Similar Threads
-
By harkne in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 13-01-15, 16:43
-
By hdw2 in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 18-07-14, 14:27
-
By Tschabo in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 16-04-14, 16:20
-
By Robi in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 14-11-13, 16:18
-
By malzusrex in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 27-05-03, 10:05
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks