Avatar billede michael_stim Ekspert
27. marts 2008 - 15:33 Der er 2 kommentarer og
1 løsning

Finde noget i string (kommasepareret)

Her kommer der en udfordring.

tabel1.
kampnr  number
done    number(1/0)
varer  clob

tabel2
kampnr  number
varenr  number

Her kommer problemet. Jeg skal finde de varer i tabel1 der IKKE er i tabel2. Problemet er bare at feltet "varer" i tabel1 er en komma/semikolonsepareret string.
Ex varer i tabel1: varenr,ciffer,ciffer,ciffer;varenr,ciffer,ciffer,ciffer;varenr, osv. Der kan være ubegrænset semikolon i stringen.

SELECT * FROM tabel1 WHERE kampnr=815 AND done=1 AND --her skal den finde varenr-- NOT IN(SELECT varenr FROM tabel2 WHERE kampnr=815);

Det er formodentlig noget PL/SQL man skal ud i, og evt regexp.

Kan jo få varenr med dbms_lob.instr(varer,"varenummeret",1,1)>0

Men det hjælper mig ikke meget i denne situation.

Håber i forstå.
Avatar billede arne_v Ekspert
30. marts 2008 - 05:28 #1
CREATE TYPE number_table_type AS TABLE OF NUMBER;
/
CREATE FUNCTION get_all_split_liste(del IN VARCHAR2 := ',') RETURN number_table_type PIPELINED AS
tmp VARCHAR2(1000);
ix NUMBER;
BEGIN
    FOR cur IN (SELECT varer FROM tabel1)
    LOOP
        tmp := cur.varer;
        LOOP
            ix := INSTR(tmp, del);
            IF ix > 0 THEN
                PIPE ROW(SUBSTR(tmp, 1, ix-1));
                tmp := SUBSTR(tmp, ix + LENGTH(del));
            ELSE
                PIPE ROW(tmp);
                EXIT;
            END IF;
        END LOOP;
    END LOOP;
    RETURN;
END;
/
SELECT * FROM TABLE(get_all_split_liste()) MINUS SELECT varenr FROM tabel2;
Avatar billede michael_stim Ekspert
31. marts 2008 - 09:05 #2
Der er ikke det du ikke kan Arne ;o) Tak for indsatsen, læg gerne et svar.
Avatar billede arne_v Ekspert
31. marts 2008 - 13:55 #3
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester