Anmelden

View Full Version : Embedded SQL mit WHERE xyz in(?)



hoerl
10-09-10, 10:04
Habe eine Abfrage definiert, die aus einem Alpha Feld über die Einschränkung IN Sätze selektieren soll.

SELECT * from XYZ where FIRMA in (?)

Das ? soll später mit einer string variable "strfirm" ersetzt werden, mit folgendem Inhalt:

A', 'B

Beim Start des SQL werden immer nur die Sätze ermittelt, bei denen im Feld FIRMA der Wert A steht, Felder mit B werden ignoriert (sind aber vorhanden).

Werden die beiden Werte vertauscht
B', 'A so werden nur die Datensätze mit FIRMA = B selektiert, die A wird ignoriert.

Wie muss die string-Variable strfirm befüllt werden, damit das IN korrekt funktioniert und die Sätze A und B selektiert werden?

Vielen Dank.

Fuerchau
10-09-10, 10:09
Das geht so leider nicht, da ein "?" als IN (?) nur als ein Wert interpretiert wird.
Du musst vorher wissen, wie viele Parameter da maximal vorkommen sollen und entsprechende Anzahl "?" vorsehen, also

in (?, ?, ...)

Für jedes "?" übergibst du dann deinen Wert. Nicht benötigte "?" befüllst du mit einem ungültigen Wert, z.B. X'FF'.

Bei Verwendung von Hostvariablen sähe das dann so aus:

in(: Var1, : Var2, ...)

Var1 = Wert1
Var2 = Wert2
:
VarN = *HIVAL

B.Hauser
10-09-10, 10:30
Statisch nur mit unterschiedlichen Host-Variablen.

Dynamisch kannst Du natürlich tun und lassen, was Du willst, etwa so:

/Free
MySQLStmt = 'Select .....' +
'From .....' +
'Where MyFld in (' + %Trim(StrFirm) + ') ... ';
Exec SQL Prepare DynSQL from :MySQLStmt;
Exec SQL Declare Csr Cursor for DynSQL;
Exec SQL Open Csr;
Do ....
Exec SQL Fetch ...;
EndDo;
Exec SQL Close Csr;
/End-Free

Birgitta