我们有一个具有ETL流程的JAVA应用程序。当我们执行该ETL流程时,zip文件已解压缩,其中包含许多csv文件。并使用此csv文件将数据加载到外部表中。将数据加载到外部表时,我们遇到以下错误。
CREATE TABLE "EXTERNAL_TABLE"
( "column1" VARCHAR2(10 BYTE),
"column2" VARCHAR2(40 BYTE),
"column3" VARCHAR2(64 BYTE)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "EXT_DIRECTORY"
ACCESS PARAMETERS
( RECORDS DELIMITED BY '\n'
BADFILE EXT_DIRECTORY:'test.bad'
DISCARDFILE EXT_DIRECTORY:'test.dsc'
SKIP 1
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' AND '"'
LRTRIM
MISSING FIELD VALUES ARE NULL (
column1 CHAR(4000), column2 CHAR(4000), column3 CHAR(4000) )
)
LOCATION
( 'test.csv'
)
)
REJECT LIMIT UNLIMITED ;
错误:
Caused by: java.sql.BatchUpdateException: error occurred during batching: ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-04040: file test.csv in TEST_TBL not found at oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:4615)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)
答案 0 :(得分:1)
当数据库尝试访问外部表并且在外部表定义中调用的文件不存在或不可访问时,引发此异常。在这种情况下,它正在寻找的文件是test.csv
,该文件应该存在于数据库中名为TEST_TBL
的目录中。您可以尝试编写测试过程,以查看是否可以使用UTL_FILE
包打开和读取此文件。
由于缺乏详细信息,很难说此站点上的其他类似问题答案是否适用于您的情况,但是您可以查看以下内容:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
sqlplus error on select from external table: ORA-29913: error in executing ODCIEXTTABLEOPEN callout