Oracle外部表:高级平面文件布局
-
23-08-2019 - |
题
我希望在Oracle数据库中创建一个外部表,从服务器上的平面文件检索其数据。这个文件的格式是不平凡的。在该文件中的每一行可以是几种不同的布局之一,这取决于线的前缀(前缀本身总是固定长度)。例如,具有'TYPE1'
开头的行将具有不同的布局比符合'TYPE2'
开始。
我已阅读,外部表可以提供给SQL的 Loader的控制文件中的所有构造的优势。然而,我看过的任何文件只接缝处理琐碎的平面文件布局使所有线路都有一个共同的布局。一个SQL 的Loader控制文件可以使用WHEN
条款很容易地处理这种情况:
WHEN (1:5) = 'TYPE1'
(
field1 POSITION(10:18),
field2 POSITION(26:35)
)
WHEN (1:5) = 'TYPE2'
(
field1 POSITION(23:27),
field2 POSITION(15:19)
)
如何表达使用Oracle的外部表定义语法这样的布局?
解决方案
这是从9.2文档,但你需要时的负载条款。
http://download.oracle.com /docs/cd/B10500_01/server.920/a96652/ch12.htm
其他提示
如果您有固定的记录试试这个
create table EXT_TABLE
(
record_type char(2),
customer_id char(10),
customer_name char(60),
item_id char(12)
quantity char(10)
)
organization external
(
type ORACLE_LOADER
default directory DIR_FLUX_DEV
access parameters
(
RECORDS DELIMITED BY NEWLINE
BADFILE 'ext_table.bad'
LOGFILE 'ext_table.log'
SKIP 0
FIELDS
(
TP_REC position(1:2) char(2),
customer_id position(3:10) char(10),
customer_name position(13:60) char(60),
item_id position(3:12) char(12),
quantity position(15:10) char(10)
)
)
location (DIR_FLUX_DEV:'file.txt')
)
reject limit 0;
然后可以访问则根据记录型柱 宣布 光标C1是
select e.* from ext_table;
begin
for r in c1 loop
if r.tp_rec = '02' then
dbms_output.put_line(r.tp_rec || ' ' || r.customer_id);
elsif r.tp_rec = '03' then
dbms_output.put_line(r.tp_rec || ' ' || r.item_id);
end if;
end loop;
end;
希望这有助于
不隶属于 StackOverflow