在使用 SQL 加载器创建外部表来加载数据时,我使用了 Oracle 文档中指定的“FILLER”关键字,如下所示。
由BOUNDFILLER或FILLER指定的填充字段是一个数据文件 映射字段与数据库列不对应。填料 字段从其所在的数据字段中分配值 映射。关于填充字段,请记住以下几点: 语法 填充字段与基于列的字段相同,除了 填充字段名称后跟 FILLER。
这是链接:
但是从外部表中选择时,我在 FIRST_NAME 列上收到以下错误
KUP-01005: syntax error: found "identifier": expecting one of: "binary_double, binary_float, comma, char, convert_error, date, defaultif, decimal, double, float, integer, (, lls, lls_compat, no, nullif, oracle_date, oracle_number, position, raw, recnum, ), unsigned, varrawc, varchar, varraw, varcharc, zoned"
KUP-01008: the bad identifier was: FILLER
是什么导致了这个问题,或者我使用它的方式错误?但使用 Char 变量工作正常。
这就是我所做的
create table etbl
(EMPLOYEE_ID number,
EMAIL varchar2(200),
SALARY number)
organization external
(
type oracle_loader
default DIRECTORY dir1
access parameters
(
records delimited by NEWLINE
skip 1
logfile 'log.txt'
badfile 'emp.bad'
fields terminated by ','
optionally ENCLOSED by '"'
MISSING field values are null
(
EMPLOYEE_ID char(200),
FIRST_NAME FILLER,
FILLER char(200),
EMAIL char(200),
FILLER char(200),
FILLER char(200),
FILLER char(200),
SALARY char(200),
FILLER char(200),
FILLER char(200),
FILLER char(200)
)
)
location ('emp.txt')
)
reject limit 10;
select * from etbl;
对我来说,你似乎被“SQL Loader”误导了words。
SQL Loader 是用于从存储在您可以访问的目录/文件夹中的文件加载数据的实用程序;一个很好的功能是它可以是您自己的 PC,不必是数据库服务器。它是通过从操作系统命令提示符调用
sqlldr.exe
来运行的。
外部表是一个不同的功能;它是在 SQL 级别的数据库(模式)中使用
create table ... organization external
语句创建的,遵循适用于 外部表 的语法。它允许您访问存储在目录/文件夹中的文件中的数据 - 通常位于数据库服务器上 - 这也是名为 directory
的 Oracle 对象的源,该对象由
sys
创建,然后授予适当的权限(读和/或写)给将使用它的数据库用户。 type oracle_loader
代表access driver,用于加载数据;那不是 SQL Loader!来自文档:
访问驱动程序运行在数据库服务器内部。此行为与 SQL*Loader 不同,SQL*Loader 是一个客户端程序,它将要加载的数据发送到服务器。最后,这意味着您在 SQL*Loader 实用程序(包括
filler
)中使用的参数与在外部表中使用的参数不同。