извлечь данные из столбца clob в оракуле - PullRequest
1 голос
/ 07 октября 2019

У меня есть данные в столбце clob, как показано ниже:

:1A:CAD22021828,17
:1B:RECEIVE GENERAL IND
11 BEGUM ST 3-15A2
  VILL              AP IND 313 416
:1C:/000061071257      CC
RECEIVER GENERAL FOR IND
C/O PNBB MAIN BRANCH
11 BEGUM ST 3-15A2
AA HYD         APIND

Теперь мне нужно загрузить их в 3 отдельных столбца в целевой таблице, как показано ниже:

1A    - CAD22021828,17
1B    - RECEIVE GENERAL IND 
        11 BEGUM ST 3-15A2
        VILL              AP IND 313 416
1C    - /000061071257      CC
        RECEIVER GENERAL FOR IND
        C/O PNBB MAIN BRANCH
        11 BEGUM ST 3-15A2
        AA HYD         APIND

может кто-топодскажите, как мне это сделать.

Это оракул 11.2

Я попробовал приведенный ниже код;

SELECT
    REGEXP_SUBSTR(mc_clob,':1A:([[:alnum:]]+\S+)') AS code1A,
    REGEXP_SUBSTR(mc_clob,':1B:([[:alnum:]]+\s+)') AS code1B,
    REGEXP_SUBSTR(mc_clob,':1C:([[:alnum:]]+\s+)') AS code1c
FROM tableA;

1 Ответ

1 голос
/ 07 октября 2019

Вот один из способов сделать это, используя REGEXP_SUBSTR с группами захвата:

SELECT
    REGEXP_SUBSTR(mc_clob, ':1A:(.*):1B:', 1, 1, 'n', 1) AS code1A,
    REGEXP_SUBSTR(mc_clob,':1B:(.*):1C:', 1, 1, 'n', 1) AS code1B,
    REGEXP_SUBSTR(mc_clob,':1C:(.*)', 1, 1, 'n', 1) AS code1c
FROM tableA;

Screen capture of result set from demo

Демо

Чтобы понять, как это работает, сделайте первый вызов REGEXP_SUBSTR:

REGEXP_SUBSTR(mc_clob, ':1A:(.*):1B:', 1, 1, 'n', 1)

Это говорит, что соответствует :1A:(.*):1B:, захватывая весь контент между :1A: и :1B: маркеры. Пятый параметр - n, который сообщает Oracle, чтобы точка соответствовала символам новой строки. То есть (.*) будет захватывать весь контент между двумя маркерами, в том числе между строками. Шестой параметр - 1, что означает, что возвращаемое значение будет первой (и единственной) группой захвата. Аналогичная логика применима ко второму и третьему вызову REGEXP_SUBSTR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...