Anmelden

View Full Version : SQL Globale Variable für "where in ..."



oulbrich
15-11-17, 11:07
Hallo zusammen,
ich möchte mir im SQL eine globale Variable definieren die ich bei der WHERE IN Abfrage benutzen kann.

z.B.


create or replace variable InPrl char(200) default('10006, 10011, 10015');

select * from Tabelle
where char(Preisliste) in (InPrl)


Das funktioniert leider nicht. Wenn ich mehrere Variablen definiere läuft die Abfrage.
Das ist aber leider nicht zielführend da ich zwischen 1 und xxx Variablen abfragen möchte.


create or replace variable Prl1 numeric(7) default(10006);
create or replace variable Prl2 numeric(7) default(10011);
create or replace variable Prl3 numeric(7) default(10015);

select * from Tabelle
where Preisliste in (Prl1, Prl2, Prl3)


Gibt es da eine elegante Möglichkeit?

Robi
15-11-17, 11:30
create table inprl ...

select ... where preisliste in(select feld from inprl)

zur zus. flexibilität nuch einen status und/oder ein datum mit in die neue Datei ...
Robi

Fuerchau
15-11-17, 11:38
Das liegt nun mal in der SQL-Syntax für "in" begründet.
Alterantiv ginge dann folgender weg:

where position(Preisliste in Prl) > 0

PRL kann dann mit "A B C" gefüllt werden.

Allerdings kann dann kein Index verwendet werden.
Für die Eindeutigkeit kann man sich auch Hilfskonstanten einfallen lassen:

position('!' concat Preisliste concat '!' in Prl)
Prl = '<ab><ac><de>!AB! !AC! !AD!'

um nicht Kombinationen zu finden die eigentlich ungültig sind.

Nachtrag:
Wenn bereits vorhanden, kann auch mit REGEXP_COUNT nach diversen Teilstrings mit einem Ausdruck komfortable suchen.</de></ac></ab>