Wpis z mikrobloga

Oracle
Mam w polach kolumnie długi ciąg znaków, w ciągu znaków znajduje się kod
A; B; C; Cośtam cośtam; KOD; 312412EEcośtam; data;

W drugiej kolumnie w innej tabeli mam też kod. Z tym że niektóre kody w stringu są inne niż w kolumnie z kodami. Wiem już w których miejscach.
Muszę wyciągnąć kody ze stringa, wyciągnąć pozycję startu i stopu, usunąć i wrzucić tam kod z kolumny z kodami. Albo podmienić. Ktoś coś? Jakiś substring? index? replace?

#programowanie #bazydanych #oracle
  • 11
@JBFC: Maż cały wachlarz opcji do wyboru od wbudowanych funkcji stringowych, poprzez pisanie PL/SQL po stworzenie procedury w Java. Jak musisz przerzucać w ten sposób dane pomiędzy tabelami to albo ostrożnie zaproponuję przerzucenie tego na jakiś własny kod (aplikację), albo napisanie PL/SQL (może być anonimowy).
@ludzik: właśnie jest. Różne pozycje, różne kody, różne długości kodów. Potrzebuje znaleźć pierwsze występowanie z pięciu wariantów startowych(powiedzmy ABAC DACAD PEL ASAF LIAS) i potem szukać drugiej pozycji do pierwszego średnika którym kończy się kod. To jest dla mnie najbardziej zwariowane, potem z górki. Jak zaindexować na pierwszy średnik po kodzie startowym?
@JBFC: W rzeczywistości najwygodniej byłoby chyba zrobić to jakąś apką która ogarnie to albo w pętli albo rekurencyjnie i będzie wrzucać pożądany wynik do właściwiej tabeli. SQL średnio się nadaje do tego.
@ludzik: ogarnąłem już :D
INSTR(pole, 'początek') as "charin", INSTR(pole, ';', charin)
mam index in i index out, teraz jeszcze szmyrne jakiegoś replace i w sumie powinno śmigać. Oby XDDD