尝试创建外部 table 时出错
error when trying to create external table
我有点 SQL 初学者,我正在尝试创建一个外部 table。这是我的 SQL:
CREATE TABLE BACKEND.EXT_DATA_LOAD
(
CUST_SESSIONID VARCHAR2(255 BYTE),
CUST_SESSION_DATE DATE,
CUST_ID VARCHAR2(10 BYTE),
CUST_FAV_NUMBER NUMBER
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY INCOMING_DIR
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE
BADFILE 'custData.bad'
NODISCARDFILE
LOGFILE 'custData.log'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' AND '"'
MISSING FIELD VALUES ARE NULL
REJECT ROWS WITH ALL NULL FIELDS
(
CUST_SESSIONID char,
CUST_SESSION_DATE char date_format DATE MASK 'dd/mm/yyyy',
CUST_ID char,
CUST_FAV_NUMBER char
) )
LOCATION (INCOMING_DIR:'custData.csv')
)
REJECT LIMIT Unlimited
NOPARALLEL
MONITORING;
ALTER TABLE BACKEND.EXT_DATA_LOAD
ADD PRIMARY KEY
(CUST_SESSIONID)
ENABLE VALIDATE;
我想可能在顶部将 CUST_FAV_NUMBER 作为 NUMBER 而在访问参数中作为 char 存在问题,但我发现的每个示例都以相同的方式设置。当我尝试 运行 时,它说它在第 3 行失败并出现错误
ORA-30657: Operation not supported on external organized table.
我看不出我有什么问题,我错过了什么?
我认为最初的问题是 monitoring
:在外部 table 上设置统计信息有一些技巧,但我认为默认的监视行为不起作用。
" I don't understand why though"
监控是 Oracle 运行的一个后台进程,用于跟踪 table 中的变化 - 插入、更新、删除 - 因此它可以评估收集的统计数据的陈旧程度。当有足够的变化时,我们可以刷新统计数据。 Oracle 无法对外部 table 进行跟踪,因为数据位于 OS 文件中。它可以看出整个文件都发生了变化,但仅此而已。
删除 monitoring
子句后,您会发现我们无法将主键约束放在外部 table 上,因为主键需要 not null
检查约束.显然数据库不能强制执行这样的检查约束,因为数据在 OS 上的文件中,而不是在实际数据库中。通过覆盖 OS 文件,可以随时替换外部中的数据。
出于完全相同的原因,无法在外部 table 上建立索引(这是添加主键失败的另一个原因)。
我有点 SQL 初学者,我正在尝试创建一个外部 table。这是我的 SQL:
CREATE TABLE BACKEND.EXT_DATA_LOAD
(
CUST_SESSIONID VARCHAR2(255 BYTE),
CUST_SESSION_DATE DATE,
CUST_ID VARCHAR2(10 BYTE),
CUST_FAV_NUMBER NUMBER
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY INCOMING_DIR
ACCESS PARAMETERS
( RECORDS DELIMITED BY NEWLINE
BADFILE 'custData.bad'
NODISCARDFILE
LOGFILE 'custData.log'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' AND '"'
MISSING FIELD VALUES ARE NULL
REJECT ROWS WITH ALL NULL FIELDS
(
CUST_SESSIONID char,
CUST_SESSION_DATE char date_format DATE MASK 'dd/mm/yyyy',
CUST_ID char,
CUST_FAV_NUMBER char
) )
LOCATION (INCOMING_DIR:'custData.csv')
)
REJECT LIMIT Unlimited
NOPARALLEL
MONITORING;
ALTER TABLE BACKEND.EXT_DATA_LOAD
ADD PRIMARY KEY
(CUST_SESSIONID)
ENABLE VALIDATE;
我想可能在顶部将 CUST_FAV_NUMBER 作为 NUMBER 而在访问参数中作为 char 存在问题,但我发现的每个示例都以相同的方式设置。当我尝试 运行 时,它说它在第 3 行失败并出现错误
ORA-30657: Operation not supported on external organized table.
我看不出我有什么问题,我错过了什么?
我认为最初的问题是 monitoring
:在外部 table 上设置统计信息有一些技巧,但我认为默认的监视行为不起作用。
" I don't understand why though"
监控是 Oracle 运行的一个后台进程,用于跟踪 table 中的变化 - 插入、更新、删除 - 因此它可以评估收集的统计数据的陈旧程度。当有足够的变化时,我们可以刷新统计数据。 Oracle 无法对外部 table 进行跟踪,因为数据位于 OS 文件中。它可以看出整个文件都发生了变化,但仅此而已。
删除 monitoring
子句后,您会发现我们无法将主键约束放在外部 table 上,因为主键需要 not null
检查约束.显然数据库不能强制执行这样的检查约束,因为数据在 OS 上的文件中,而不是在实际数据库中。通过覆盖 OS 文件,可以随时替换外部中的数据。
出于完全相同的原因,无法在外部 table 上建立索引(这是添加主键失败的另一个原因)。