-
SQL - Cursor vernichten ?!?
hallo allerseits,
ich habe folgendes problem und bin daher auf der suche nach einer lösung:
aufgrund verschiedener bedingungen werden unterschiedliche sql-statements generiert, die je nach bedingung ausgeführt werden sollen. jetzt habe ich aber das problem das der cursor immer das erste zutreffende statement auswählt und für dieses werte zurückgibt. kann mir bitte jemand erklären warum und ob man das ändern kann ? cursor vernichten oder so in etwa ?
hier die entsprechenden codezeilen für die vorbereitung
/Free
#SQLSTM =
'Select TXTXNR, TXTXB1, TXTXB2, TXTXB3, TXTXB4, TXTXB5, TXTXB6, ' +
'TXSTK1, TXSTK2, TXSTK3 from TABD ' +
'WHERE TXSART = ''TX'' and TXFIRM = ''1'' and TXWKNR = ''000'' ' +
'and TXTXRT = ''PE''';
#SQLINB = 'and TXTXB4 in(''BFS'', ''B40'', ''B60'', ''B100'')';
#SQLINS = 'and TXTXB4 in(''SFS'', ''SR'', ''SI'', ''SAAB'')';
#SQLOR = ' or TXSART = ''TX'' and TXFIRM = ''1'' ' +
'and TXWKNR = ''000'' and TXTXRT = ''PE'' and TXTXB4 = '' ''';
/End-Free
C INITE ENDSR
hier die bedingungen
If C0PNR# <> *Zeros;
#SQLSEL = ' and TXTXNR = ' + %Char(C0PNR#);
EndIf;
If C0NAME <> *Blanks;
#SQLSEL = ' and TXTXB1 like ''' + %Trim(C0NAME) + '%''';
EndIf;
If C0ART <> *Blanks;
#SQLSEL = ' and TXTXB4 like ''' + %Trim(C0ART) + '%''';
EndIf;
If C0KFZ <> *Blanks;
#SQLSEL = ' and TXTXB5 like ''' + %Trim(C0KFZ) + '%''';
EndIf;
Select;
When (*In31 = '1' and *In21 = '1') or (*In34 = '1' and *In21 = '1');
#SQLSTM = #SQLSTM + #SQLSEL + #SQLORP;
When (*In31 = '1' and *In21 = '0') or (*In34 = '1' and *In21 = '0');
#SQLSTM = #SQLSTM + #SQLSEL + #SQLORN;
When *In32 = '1' and *In21 = '1';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINB + #SQLOR + #SQLSEL + #SQLORP;
When *In32 = '1' and *In21 = '0';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINB + #SQLOR + #SQLSEL + #SQLORN;
When *In33 = '1' and *In21 = '1';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINS + #SQLOR + #SQLSEL + #SQLORP;
When *In33 = '1' and *In21 = '0';
#SQLSTM = #SQLSTM + #SQLSEL + #SQLINS + #SQLOR + #SQLSEL + #SQLORN;
EndSl;
/End-Free
und zu guter letzt das fetch
*
* Statement vorbereiten
*
C/EXEC SQL
C+ PREPARE S1 FROM: #SQLSTM
C/END-EXEC
*
* Cursor defnieren
*
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR S1
C/END-EXEC
*
* Cursor schliessen
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC
*
* Cursor öffnen
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
* alle Zeilen laden
*
C Eval SIDX2 = 5000
C/EXEC SQL
C+ FETCH FROM C1 FOR :SIDX2 ROWS INTO :S00S01L:IND_ARRAY
C/END-EXEC
*
C Eval I# = SQLERRD(3)
Similar Threads
-
By christian_lettner in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 16-11-06, 10:15
-
By malzusrex in forum IBM i Hauptforum
Antworten: 8
Letzter Beitrag: 19-09-06, 11:04
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 11
Letzter Beitrag: 28-06-06, 14:11
-
By AS400-Anfänger in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 27-06-06, 13:18
-
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
-
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