Загрузчик SQL, связывающий физические записи с переменным числом с одной физической записью - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть следующие данные:

Aapple mango wood
Bpine tea orange
Bnuts blots match
Ajust another record

Теперь я хочу, чтобы каждая запись, начинающаяся с 'A', ассоциировалась с записью, начинающейся с 'B', до тех пор, пока не встретится другая запись 'A' или запись, отличная от 'B'. Например, из приведенных выше данных, Я хотел бы получить следующие данные (2 записи),

mango tea
mango blots

Число записей B, следующих за записью A, является переменным, то есть (за записью A может следовать любое количество записей B (3 в данных ниже).

Aapple mango wood
Bpine tea orange
Bnuts blots match
Basdf asdf  asdf
Ajust another record

Таким образом, результат будет

mango tea
mango blots
mango asdf

Возможно ли сделать вышеизложенное с помощью sql loader ?. Любая помощь / указатели будут приветствоваться.

Edit: Я думал об использовании предложения CONTINUEIF, но, похоже, нет способа удалить записи, которые были получены ранее. Например, если я использую,

CONTINUEIF NEXT PRESERVE(1)='B'

Я бы получил "чай с манговыми пятнами asdf" за один раз, а не

"mango|tea"
"mango|blots"
"mango|asdf"

1 Ответ

1 голос
/ 12 сентября 2011

Я думаю, что я бы загрузил записи в 2 отдельные таблицы на основе идентификатора типа записи, см .: http://download.oracle.com/docs/cd/B19306_01/server.102/b14215/ldr_control_file.htm#i1005614

и использовал бы recnum для сохранения порядка

, см .: http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch06.htm

затем вы можете преобразовать данные в sql

SELECT 
    a.text,
    b.text,
    a.id,
    a.nxtid 
FROM 
(
    SELECT text,id, NVL(LEAD(seq,1) OVER (ORDER BY id),999999) AS NXTID
    FROM t1
) a
LEFT JOIN t2 B ON b.seq > a.id AND b.id < a.nxtid 
...