Straße und Hausnr. trennen
CREATE OR REPLACE PROCEDURE EDV.P_SPLIT_STR_HNR(P1_STR IN VARCHAR2, P_CKC_STRNR_NEU IN OUT VARCHAR2, P_CKC_STR_NEU IN OUT VARCHAR2) IS
-- Splitten von Straße und Hausnummer aus p1_str in P_CKC_STRNR_NEU (Hausnummer) und P_CKC_STR_NEU (Straße ohne Hausnummer)
E_STR VARCHAR(40);
V_CKC_STRNR_NEU VARCHAR(40);
V_CKC_STR_NEU VARCHAR(40);
I_STR NUMBER;
I_STR_1 NUMBER;
I_STR_2 NUMBER;
I_NUM_CNT NUMBER;
I_ALF_CNT NUMBER;
I_NUM_ON BOOLEAN;
V_ERRM VARCHAR2(2000);
Z CHAR(1);
V_STEP NUMBER;
BEGIN
V_STEP := 1;
V_CKC_STRNR_NEU := '';
V_CKC_STR_NEU := '';
I_NUM_CNT := 0;
I_ALF_CNT := 0;
I_NUM_ON := TRUE;
E_STR := LTRIM(RTRIM(P1_STR));
I_STR := LENGTH(E_STR);
WHILE I_STR > 0
LOOP
IF I_STR > 1 THEN
I_STR_1 := I_STR - 1;
ELSE
I_STR_1 := 1;
END IF;
IF I_STR > 2 THEN
I_STR_2 := I_STR - 2;
ELSE
I_STR_2 := 1;
END IF;
Z := SUBSTR(E_STR,I_STR,1);
IF I_NUM_ON AND Z = '-' AND V_CKC_STRNR_NEU NOT LIKE '%-%' THEN
I_NUM_CNT := I_NUM_CNT + 1;
ELSIF I_NUM_ON AND Z = ' ' THEN
I_NUM_CNT := I_NUM_CNT + 1;
ELSIF I_NUM_ON AND SUBSTR(E_STR,I_STR,1) IN ('0','1','2','3','4','5','6','7','8','9') THEN
I_NUM_CNT := I_NUM_CNT + 1;
ELSIF (I_STR = LENGTH(E_STR) AND SUBSTR(E_STR,I_STR_1,1) IN ('0','1','2','3','4','5','6','7','8','9'))
OR (I_STR = LENGTH(E_STR) AND SUBSTR(E_STR,I_STR_2,1) IN ('0','1','2','3','4','5','6','7','8','9') AND SUBSTR(E_STR,I_STR_1,1) = ' ')THEN
I_NUM_CNT := I_NUM_CNT + 1;
ELSE
I_ALF_CNT := I_ALF_CNT + 1;
I_NUM_ON := FALSE;
END IF;
IF I_NUM_ON THEN
V_CKC_STRNR_NEU := SUBSTR(E_STR,I_STR,1) || V_CKC_STRNR_NEU;
ELSE
V_CKC_STR_NEU := SUBSTR(E_STR,I_STR,1) || V_CKC_STR_NEU;
END IF;
I_STR := I_STR - 1;
END LOOP;
P_CKC_STRNR_NEU := RTRIM(LTRIM(V_CKC_STRNR_NEU));
P_CKC_STR_NEU := RTRIM(LTRIM(V_CKC_STR_NEU));
EXCEPTION
WHEN OTHERS THEN
null;
END;
/