Procedure erstellen

Hallo,

ich möchte eine Procedure schreiben, die über Nacht nur die Datensätze einer Tabelle holt, die eine bestimmte Baureihen-Anfangsbuchstaben haben.

Doch leider funktioniert folgendes nicht:
AND SUBSTR(BAUREIHE, 1, 1) IN ( varBAUREIHE)

Die Variable varBAUREIHE ist befüllt (‚B‘,‚E‘,‚L‘,‚R‘,‚S‘,‚W‘)
Dieser Inhalt wird vorher aus einer Config-Tabelle ermittelt in der eine Auflistung steht (A,B,C,D)
Doch sobald ich diese Var in den Statement einbauer in der IN-Clausel gehts nicht, als Wertübergabe siehe folgende Zeilen:
SELECT
DISTINCT
SUBSTR(BAUREIHE, 1, 1), varBAUREIHE

geht es schon.

Kann mir jemand sagen wie ich dies in der IN-Clausel rein bekomme?

Vielen Dank

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

CREATE OR REPLACE PROCEDURE PROC_BAUREIHE_IMPORT
IS
varTMP NUMBER;
varTMP_BAUREIHE VARCHAR2(100);
varERRORCODE NUMBER;
varBAUREIHE VARCHAR2(100);

CURSOR baureihe_cursor is
–*******************************************************

select ‚‘’’|| Replace(REPLACE(baureihe_liste, ‚,‘, ‚‘’,’’’), ’ ‚, ‚‘)|| ‚‘‘’ BAUREIHE
from CONFIG_TAB;
–Folgende Form entsteht: ‚B‘,‚E‘,‚L‘,‚R‘,‚S‘,‚W‘
–*******************************************************
baureihe_val baureihe_cursor%ROWTYPE;

BEGIN
OPEN baureihe_cursor;
LOOP
BEGIN
varTMP := 1;

FETCH baureihe_cursor INTO baureihe_val;
EXIT WHEN baureihe_cursor%NOTFOUND;

varTMP_BAUREIHE := baureihe_val.BAUREIHE;
IF varTMP = 1
THEN
DBMS_OUTPUT.put_line(‚1. Mal‘);
– is ok
varTMP :=2;
varBAUREIHE := varTMP_BAUREIHE;
ELSE
varTMP :=3;
varBAUREIHE := ‚,‘|| varTMP_BAUREIHE;

END IF;

insert into ZULAESSIGE_BAUREIHEN (BAUREIHE, TEXT)
(
SELECT
DISTINCT
SUBSTR(BAUREIHE, 1, 1), varBAUREIHE
FROM IMPORT_TABELLE
WHERE
ID > 1000
AND BAUREIHE IS NOT NULL
–sobald ich die Variable ‚varBAUREIHE‘ durch ‚B‘,‚E‘,‚L‘,‚R‘,‚S‘,‚W‘ ersetze - gehts
AND SUBSTR(BAUREIHE, 1, 1) IN ( varBAUREIHE)
);

EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -6502 THEN

varERRORCODE := SQLCODE;
DBMS_OUTPUT.PUT_LINE(varBAUREIHE);
ELSE

varERRORCODE := SQLCODE;
DBMS_OUTPUT.PUT_LINE(varERRORCODE);
END IF;
END;
END LOOP;
CLOSE baureihe_cursor;

END;

Hallo,

versuchs doch mal mit dynamischem SQL:

execute immediate ‚der select, so wie er funktioniert‘

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]