尝试创建外部 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 上建立索引(这是添加主键失败的另一个原因)。