PDA

View Full Version : SQL Selektion mit LIKE



RLurati
18-01-05, 07:52
Guten Tag,

ich habe Probleme mit folgendem SQL-Statement:

EXEC SQL
DECLARE SQLCUR2 CURSOR FOR SELECT LAUFNR, BIBLIOTHEK,
OBJEKT, OBJEKTTYP, BESCHREIB, LASTUSEDAT, ABTEILUNG,
PRIRORITA, TEVBEBRAU, DATMUT, MUTUSER, TYP, RECORDGEL,
RELEVANT FROM AIGDBA1F01 WHERE BIBLIOTHEK LIKE :W-D1BIBLIO
AND OBJEKT LIKE :W-D5OBJEKT AND BESCHREIB LIKE :W-D5BESCHR
ORDER BY BIBLIOTHEK, OBJEKT
END-EXEC.


Lesen:

EXEC SQL
FETCH NEXT FROM SQLCUR2 INTO :LAUFNR, :BIBLIOTHEK, :OBJEKT,
:OBJEKTTYP, :BESCHREIB, :LASTUSEDAT, :ABTEILUNG, :PRIRORITA,
:TEVBEBRAU, :DATMUT, :MUTUSER, :TYP, :RECORDGEL, :RELEVANT
END-EXEC.

SQLCODE = '000000100'
ODP created.
Blocking used for query.
Cursor SQLCUR1 opened.
1 rows fetched from cursor SQLCUR1.
Unable to retrieve query options file.

kann mir jemand einen Tip geben, was ich falsch mache.
Danke für die Hilfe

Gruss Reno

mk
18-01-05, 08:06
Hallo Reno,

was steht denn in den Feldern ?
z.B. W-D1BIBLIO = '%SSS%'

Der like sucht dann alle Inhalte mit SSS
gruss Michael




ich habe Probleme mit folgendem SQL-Statement:

EXEC SQL
DECLARE SQLCUR2 CURSOR FOR SELECT LAUFNR, BIBLIOTHEK,
OBJEKT, OBJEKTTYP, BESCHREIB, LASTUSEDAT, ABTEILUNG,
PRIRORITA, TEVBEBRAU, DATMUT, MUTUSER, TYP, RECORDGEL,
RELEVANT FROM AIGDBA1F01 WHERE BIBLIOTHEK LIKE :W-D1BIBLIO
AND OBJEKT LIKE :W-D5OBJEKT AND BESCHREIB LIKE :W-D5BESCHR
ORDER BY BIBLIOTHEK, OBJEKT
END-EXEC.


Lesen:

EXEC SQL
FETCH NEXT FROM SQLCUR2 INTO :LAUFNR, :BIBLIOTHEK, :OBJEKT,
:OBJEKTTYP, :BESCHREIB, :LASTUSEDAT, :ABTEILUNG, :PRIRORITA,
:TEVBEBRAU, :DATMUT, :MUTUSER, :TYP, :RECORDGEL, :RELEVANT
END-EXEC.

SQLCODE = '000000100'
ODP created.
Blocking used for query.
Cursor SQLCUR1 opened.
1 rows fetched from cursor SQLCUR1.
Unable to retrieve query options file.

kann mir jemand einen Tip geben, was ich falsch mache.
Danke für die Hilfe

Gruss Reno[/QUOTE]

RLurati
18-01-05, 08:32
Hier meine möglichen Inhalte:

'%xxx%'
'BIBLIOTHEK'
'%%'
Gruss Reno


Hallo Reno,

was steht denn in den Feldern ?
z.B. W-D1BIBLIO = '%SSS%'

Der like sucht dann alle Inhalte mit SSS
gruss Michael




ich habe Probleme mit folgendem SQL-Statement:

EXEC SQL
DECLARE SQLCUR2 CURSOR FOR SELECT LAUFNR, BIBLIOTHEK,
OBJEKT, OBJEKTTYP, BESCHREIB, LASTUSEDAT, ABTEILUNG,
PRIRORITA, TEVBEBRAU, DATMUT, MUTUSER, TYP, RECORDGEL,
RELEVANT FROM AIGDBA1F01 WHERE BIBLIOTHEK LIKE :W-D1BIBLIO
AND OBJEKT LIKE :W-D5OBJEKT AND BESCHREIB LIKE :W-D5BESCHR
ORDER BY BIBLIOTHEK, OBJEKT
END-EXEC.


Lesen:

EXEC SQL
FETCH NEXT FROM SQLCUR2 INTO :LAUFNR, :BIBLIOTHEK, :OBJEKT,
:OBJEKTTYP, :BESCHREIB, :LASTUSEDAT, :ABTEILUNG, :PRIRORITA,
:TEVBEBRAU, :DATMUT, :MUTUSER, :TYP, :RECORDGEL, :RELEVANT
END-EXEC.

SQLCODE = '000000100'
ODP created.
Blocking used for query.
Cursor SQLCUR1 opened.
1 rows fetched from cursor SQLCUR1.
Unable to retrieve query options file.

kann mir jemand einen Tip geben, was ich falsch mache.
Danke für die Hilfe

Gruss Reno[/QUOTE]

B.Hauser
18-01-05, 09:20
Hallo,

wie sind die Host-Variablen (W-....) definiert?
Mit fixer oder variabler Länge?

Bei Feldern mit fixer Länge werden sieht der Feld-Inhalt etwa wie folgt aus: '%ABC% '
Das heißt es wird nach einem String gesucht, der irgendwo 'ABC' enthält und am Ende eine bestimmte Anzahl *Blanks stehen hat.

Bei Feldern mit variabler Länge sieht der Feld-Inhalt etwa wie folgt aus: '%ABC%'
Es werden alle Strings gefunden, die irgendwo ABC enthalten.

Wenn Du mit Feldern fixer Länge arbeitest, solltest Du in deinem Declare-Statement die Scalare Funktion TRIM verwenden, um die überflüssigen Blanks zu entfernen.

Birgitta

RLurati
18-01-05, 09:26
Zum Beispiel:

01 W-D1BIBLIO PIC X(12).
01 W-D5OBJEKT PIC X(12).
01 W-D5BESCHR PIC X(102).

Nur im Cobol funktioniert es nicht !!
Aber im manuel im STRSQL geht es ohne Probleme, verstehe es nicht.
kannst Du mir ein Beispiel zeigen, wie man mit TRIM vorgeht.

Danke und Gruss Reno

Fuerchau
18-01-05, 10:51
EXEC SQL
DECLARE SQLCUR2 CURSOR FOR SELECT LAUFNR, BIBLIOTHEK,
OBJEKT, OBJEKTTYP, BESCHREIB, LASTUSEDAT, ABTEILUNG,
PRIRORITA, TEVBEBRAU, DATMUT, MUTUSER, TYP, RECORDGEL,
RELEVANT FROM AIGDBA1F01 WHERE BIBLIOTHEK LIKE
trim(:W-D1BIBLIO)
AND OBJEKT LIKE
trim(:W-D5OBJEKT)
AND BESCHREIB LIKE
trim(:W-D5BESCHR)
ORDER BY BIBLIOTHEK, OBJEKT
END-EXEC.

RLurati
18-01-05, 11:38
Ich habe es mit TRIM angepasst, leider den gleichen Effekt.


STRSQL (so geht es): zum Beispiel

SELECT LAUFNR, BIBLIOTHEK, OBJEKT, OBJEKTTYP, BESCHREIB,
LASTUSEDAT, ABTEILUNG, PRIRORITA, TEVBEBRAU, DATMUT, MUTUSER, TYP,
RECORDGEL, RELEVANT FROM zzrelu/AIGDBA1F01 WHERE BIBLIOTHEK =
'AIGTOOL' AND OBJEKT like '% ' and BESCHREIB like
'% ' ORDER BY BIBLIOTHEK, OBJEKT


aus dem COBOL (SQLCBLLE):

EXEC SQL
DECLARE SQLCUR2 CURSOR FOR SELECT LAUFNR, BIBLIOTHEK,
OBJEKT, OBJEKTTYP, BESCHREIB, LASTUSEDAT, ABTEILUNG,
PRIRORITA, TEVBEBRAU, DATMUT, MUTUSER, TYP, RECORDGEL,
RELEVANT FROM AIGDBA1F01 WHERE BIBLIOTHEK LIKE
trim(:W-D1BIBLIO) AND OBJEKT LIKE trim(:W-D5OBJEKT) AND
BESCHREIB LIKE trim(:W-D5BESCHR) ORDER BY BIBLIOTHEK, OBJEKT
END-EXEC.



Inhalt Variablen im Debug-Mode:

W-D5OBJEKT = '% '
W-D5BESCHR =
....5...10...15...20...25...30...35...40...45...50 ...55...60
1 '% '
61 ' '
W-D1BIBLIO = 'AIGTOOL '
SQLCODE = 000000100.


EXEC SQL
FETCH NEXT FROM SQLCUR2 INTO :LAUFNR, :BIBLIOTHEK, :OBJEKT,
:OBJEKTTYP, :BESCHREIB, :LASTUSEDAT, :ABTEILUNG, :PRIRORITA
:TEVBEBRAU, :DATMUT, :MUTUSER, :TYP, :RECORDGEL, :RELEVANT
END-EXEC.


Gruss Reno