2013-03-09 2 views
0

У меня есть запись в таблице, которая содержит только один столбец, а в ее столбце содержатся данные вроде строки.PL Sql Parsing # Персонаж

D # 1001111068 # 112B # 0010040130022013012111505444 ## 20130121110800 # 20130121115054 # 01 # - ## 240 # # имя пользователя имя пользователя # 20130124171831 # 20130130 # 6

Между # chracters каждая строка показывает один столбец в другой такой стол.

D# 
1001111068#       --Customer Number 
112B#        --Procut Id 
0010040130022013012111505444#  --Serial Number 
#         --Order Number(empty record)  
20130121110800#      --X Columns 

Я хочу проанализировать эти предметы и вставить их в другой стол. Как это написать.

+0

легче проанализировать его в приложении уровень ликации. –

+0

Я знаю это, но наш дизайн не разрешен, я должен решить в процедуре. – engcmreng

ответ

1

Вы можете извлечь п-ю подстроку следующим выражением:

regexp_substr(source_string, '([^#]*)(#|$)', 1, n, '', 1) 

Полный запрос:

create table your_table(
    source_string varchar2(4000) 
); 

insert into your_table 
values('D#1001111068#112B#0010040130022013012111505444##20130121110800#20130121115054#01#-##240#username#username#20130124171831#20130130#6'); 

select 
    n, 
    regexp_substr(source_string, '([^#]*)(#|$)', 1, n, '', 1) 
from your_table, 
(
    select level as n from dual 
    connect by level <= (
    select max(regexp_count(source_string, '#')) + 1 
    from your_table 
) 
) 
where n <= regexp_count(source_string, '#') + 1; 

Выход:

 
1 D 
2 1001111068 
3 112B 
4 0010040130022013012111505444 
5 (null) 
6 20130121110800 
7 20130121115054 
8 01 
9 - 
10 (null) 
11 240 
12 username 
13 username 
14 20130124171831 
15 20130130 
16 6 

fiddle

+0

благодарю вас за ответ. (Извините, что я опаздываю) – engcmreng