-
Statisches Embedded SQL mit IN
Hallo,
weiß jemand, ob man ein IN Prädikat im statischen embedded SQL einsetzen kann, bzw. wie das funktioniert?
Folgendes Statement läuft zwar, liefert aber nicht immer die korrekten Ergebnisse.
Code:
where ...
zp_belawer in :g#belawerSel)
In der Datei steht im Feld zp_belawer (char1) ein V.
Wenn in der Hostvariable "V", steht klappt es. Ich möchte aber, dass der User eine Reihe von Werten eingeben kann. In der Hostvariable sollte also so etwas wie "V, K, E" stehen.
Dann klappt die Selektion aber nicht.
Dieter
-
Das geht so nicht!
Die einzige Möglichkeit ist, eine Anzahl von Variablen vorzudefinieren und im (statischen) embedded SQL zu verwenden.
Die erfassten Werte werden in die Variablen eingepflegt und in die "fehlenden" wird einfach der erste eingegebene Wert wieder übernommen.
Mit Trick17 geht's auch statisch, aber wahrscheinlich ist das nicht unbedingt perfomant.
1. Die erfassten Werte werden hintereinander in einen String geschrieben, der dann mit LIKE durchforstet wird.
2. Auswahl V, K, E --> String 'V, K, E,'
3. LIKE-Anweisung
:String like '%' concat Trim(Spalte) concat ',' concat '%'
Ansonsten hilft nur dynamisches SQL.
Birgitta
-
Habe gerade gesehen, dass ich die gleiche Frage vor ein paar Jahren schon mal gestellt habe. Das scheint also nicht zu gehen. Werde deshalb dynamisches SQL verwenden.
Dieter
-
hattest du die Frage nicht schon mal?
http://newsolutions.de/forum-systemi...highlight=robi
-> Hat sich erledigt, du hast es gemerkt ...
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Natürlich geht das auch mit statischem SQL.
Du benötigst halt nur entsprechend viele Host-Variablen:
in (: MyV1, : MyV2, : MyV3, ..., : MyVn)
Hier kann u.U. auch ein Index verwendet werden.
An Stelle von Like kannst du auch posstr() verwenden:
where posstr(MyVar, : MyHostVar) > 0
MyHostVar enthält die Liste der Kennzeichen. Allerdings kann hier kein Index verwendet werden.
Je nach weiteren Where-Bedingungen spielt ein Index über dieses Feld aber sowieso keine besondere Rolle.
-
-
... man könnte natürlich eine table function schreiben, die einen String als Tabelle darstellt und dannn diese function verwenden
select ...
from ...
where ... in (select (string2table( :myVar))
folgende Oracle Lösung (http://blog.tanelpoder.com/2007/06/2...ble-tokenizer/) sollte nach V7 im DB2 auf AS/400 portierbar sein.
D*B
der so seine Zweifel hat, dass das auf der AS wirklich brummt, da dürfte die dynamic SQL Variante mit variablem SQLString einfacher und schneller sein.
-
Nochmals Danke für alle Antworten. Ich habe jetzt dynamisches SQL verwendet. Das mag ich eigentlich nicht so gerne, weil man da im RDi kein Syntax-Highlighting und keine Compilerprüfung erhält.
Dieter
Similar Threads
-
By malzusrex in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 02-06-15, 11:26
-
By tarkusch in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 29-06-14, 15:12
-
By Ludger Muhmann in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 30-07-02, 09:49
-
By Joshua in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 11-04-02, 09:42
-
By Stefan_R in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 12-10-01, 09:47
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