2011-09-12 4 views
0

나는 다음과 같은 데이터가 있습니다SQL 로더

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

가 지금은 기록이 다른 때까지 'B'로 시작과 관련이 'A'로 시작하는 모든 레코드를 원하는을 'A'레코드 또는 'B'가 아닌 레코드가 발생했습니다. 상기 데이터로부터 예를 들어, 난 다음 데이터 (2 레코드)를 검색하고자

mango tea 
mango blots 

레코드, 즉, 변수 (A 레코드가 따라야 할 수도 다음 B 레코드의 개수 (아래 자료 3) 모든 B 레코드 수로.

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

이렇게 얻어진 출력

mango tea 
mango blots 
mango asdf 

는 ㄱ을 수행하는 것이 가능 것 SQL 로더를 사용하여 bove?. 어떤 도움/포인터가 가장 환영받을 것입니다.

편집 : CONTINUEIF 절을 사용하려고 생각했지만 이전에 검색된 레코드를 제거하는 방법이없는 것 같습니다. 예를 들어 , 내가 사용하는 경우,

CONTINUEIF NEXT PRESERVE(1)='B' 

나는 "망고 차 오 asdf을"한 번에 및을 얻을 것없는

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

답변

1

나는 내가에 따라이 개 별도의 테이블에 레코드를로드 할 것이라고 생각 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 
+0

감사 데이터를 변환 할 수 있습니다. SQL없이이 작업을 수행 할 수있는 방법이 있습니까? 즉, 순전히 SQL 로더를 사용합니다. 현재 우리는 PL/SQL을 사용하여 UTL_FILE을 사용하여 파일을로드하고 있으며 SQL 로더를 사용하여 성능을 향상시키고 자합니다. – digdug

+0

내가 아는 것은 아니다. 최소한이 방법은 행 기반이 아닌 단일 집합 기반 연산을 사용하므로 더 빨라야합니다. –

+0

감사합니다. 이 문제에 대한 다른 해결책을 찾지 못했기 때문에 귀하의 답변을 정답으로 표시하고 있습니다. – digdug