2015-05-13 86 views
0

我有一個文件的下面的代碼片段,需要解析:解析的Oracle 11g

000000837002100302015-04-13-15.55.12.1922082015-04-1300032128CHECK CLEARED CHECK CLEARED 00000000000030000000000000000000000000000000016594703 

該字符串的各個位置如下:

RECORD1      - POS (1 :10) - DUR 10 
RECORD2      - POS (11 :13) - DUR 3 
RECORD3      - POS (14 :17) - DUR 4 
RECORD4      - POS (18 :43) - DUR 26 
RECORD5      - POS (44 :53) - DUR 10 
RECORD6      - POS (54 :61) - DUR 8 
RECORD7      - POS (62 :95) - DUR 34 
RECORD9      - POS (96 :215) - DUR 120 
RECORD10     - POS (216:233) - DUR 18 
RECORD11     - POS (234:251) - DUR 18 
RECORD12     - POS (252:266) - DUR 15 
RECORD13     - POS (267:268) - DUR 2 

我需要解析字符串提取這些記錄來自該字符串。任何人都可以幫助substr/instr功能來解釋字符串和空格。提取的數據將被插入到表中。先謝謝你!

回答

0

您不需要instr,因爲該位置已被指定。相反 使用substr

insert into some_table 
select substr(text, 1, 10) rec1, substr(text, 11, 3) rec2, ... 
from text_table; 
1

你能不能簡單地用一個SQLLOADER控制文件例如

echo "OPTIONS (DIRECT=TRUE)" 
echo "LOAD DATA" 
echo "INFILE '/path/to/file/$1'" 
echo "BADFILE '/path/to/file/log/$1.bad'" 
echo "DISCARDFILE '/path/to/file/log/$1.dsc'" 
echo "APPEND INTO TABLE table.t" 
echo "(" 
echo " RECORD1  POSITION (1:10)," 
echo " RECORD2 POSITION (11:13)," 
etc... 
echo ")" 
+0

不是@ mr.tambourine男士。 – QuickDrawMcgraw

+0

謝謝德米特里,我對空白空間如何落實感到困惑,但我想我明白你在做什麼。如果我沒有位置規格,我將不得不使用instr來確定字符串在哪裏斷開以提取不同的記錄? – QuickDrawMcgraw

+0

如何幫助?在不知道長度的情況下,您如何期望000000837002100302015在邏輯上被分解? –