-
SQLRPLE und LEFT JOIN und ganz komisches Verhalten
Hallo zusammen,
ich eine ein SQL Statement mit einem LEFT JOIN.
Die gefunden Sätze werden per
Code:
FETCH C1 FOR 9999 ROWS INTO :DSSATZ
in die Datenstruktur gesetzt.
Der erste Satz hat jetzt nicht alle Felder füllen können, da in der inneren Datei kein Satz gefunden worden ist.
Allerdings ist die DS ab dem Satz dahinter leer obwohl noch weitere Sätze vorhanden sind.
Wenn ich das gleiche SQL-Statement per STRSQL ausführe, bekomme ich alle Sätze angezeigt, einzig im RPGLE wird nur der erste Satz in die DS gesetzt?
Was kann / muss ich machen, damit alle gefundenen Sätze in die DS gesetzt bekomme?
Danke an alle Helfenden!
-
Bei Vorkommen von NULL-Werten benötigst du natürlich auch NULL-Anzeiger.
Bei verwendung einer Struktur beim Fetch brauchst du ein Array von NULL-Anzeigern:
D MyDs DS
D F1 ...
D F2 ...
D MyNulls S 5I 0 dim(Anzahl Felder)
exec sql fetch MyCursour into : MyDS :MyNulls;
Beachte bitte: kein Komma zwischen den Feldern beim Fetch.
In den NULL-Anzeigern erfährst du dann, ob das Feld gefüllt wurde (hier ist leider abzählen angesagt).
-
Was mir ein wenig Spanisch vorkam ist aber das nicht alle Datensätze aus der Datei in die DS geladen worden sind. Wenn ich den OCCUR dann auf das zweite vorkommen mache, ist dann der Datensatz in der DS drinnen, oder muss ich vorher noch was machen?
Aber trotzdem vielen Dank.
-
Den Fetch 9999 habe ich übersehen, mit NULL-Werten dürfte das nicht klappen, da du kein 2-dimensionales NULL-Array angeben kannst.
Du musst wohl die Sätze einzeln mit Fetch laden und deinen OCCUR selber machen.
Performancemäßig macht das keinen Unterschied.
-
Schade, dann werde ich mal eine Schleife machen. Und danke für den Tipp
-
Zitat von Fuerchau
Den Fetch 9999 habe ich übersehen, mit NULL-Werten dürfte das nicht klappen, da du kein 2-dimensionales NULL-Array angeben kannst.
Du musst wohl die Sätze einzeln mit Fetch laden und deinen OCCUR selber machen.
Performancemäßig macht das keinen Unterschied.
Hier irrt Baldur, was nicht sehr häufig ist.
- mit SQLDA geht das schon
- ein einfacher Work around mit coalesce im Select statement tut es in den meisten Fällen auch
- block fetch ist für read only Verarbeitung signifikant schneller (ein fetch von 999 Sätzen dauert meist gleichlang wie ein einzelner fetch)
- eingeholt wird das erst bei updates, da ist der positioned wieder mächtig im Vorteil
Ansonsten sollte man sich von den Altlasten occur trennen und dim verwenden
D*B
-
Hier haben sich wohl einige vergaloppiert!
Indikator-Datenstrukturen können sowohl mit Mehrfach-Datenstrukturen (Schlüsselwort OCCURS) als auch Array-Datenstrukturen (Schlüsselwort DIM) verwendet werden!
1. Occurs:
Code:
D DSCsrC1 DS Occurs(50) Inz
D CsrC1Kunde 15A
D CsrC1ArtNr 22A
D CsrC1Umsatz 11P 2
D DSIndC1 DS Occurs(50) Inz
D Ind 5I 0 dim(3)
*------------------------------------------------------
/Free
Exec SQL Declare CsrC1 Cursor For Select ... ;
Exec SQL Open CsrC1;
EXEC SQL Fetch Next From CsrC1 For 50 Rows
into :DSCsrC1 :DSIndC1;
2. Dim()
Code:
D DSCsrC1 DS Dim(50) Qualified Inz
D CsrC1Kunde 15A
D CsrC1ArtNr 22A
D CsrC1Umsatz 11P 2
D DSIndCsrC1 DS Dim(50) Qualified Inz
D Ind 5I 0 Dim(3)
/*--------------------------------------------------------
/Free
Exec SQL Declare CsrC1 Cursor For Select ... ;
Exec SQL Open CsrC1;
EXEC SQL Fetch Next From CsrC1 For 50 Rows
into :DSCsrC1 :DSIndCsrC1;
Birgitta
-
Zitat von B.Hauser
Hier haben sich wohl einige vergaloppiert!
Indikator-Datenstrukturen können sowohl mit Mehrfach-Datenstrukturen (Schlüsselwort OCCURS) als auch Array-Datenstrukturen (Schlüsselwort DIM) verwendet werden!
Birgitta
... wer lesen kann ist klar im Vorteil! hat niemand behauptet, dass das nicht geht, aber längst nicht alles was geht, ist auch von Vorteil, insbesondere bei RPG nicht.
D*B
Similar Threads
-
By Tobse77 in forum NEWSboard Programmierung
Antworten: 12
Letzter Beitrag: 24-09-09, 08:31
-
By muadeep in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 15-01-09, 10:30
-
By ahingerl in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 08-12-06, 08:28
-
By cassi in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 22-11-06, 15:03
-
By Matthias.Hayn in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 06-12-04, 13:33
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