Oracle 在ODI过程中从平面文件(数据存储)读取数据

Oracle 在ODI过程中从平面文件(数据存储)读取数据,oracle,oracle-data-integrator,Oracle,Oracle Data Integrator,我正在尝试从PL/SQL过程中读取一个文件,但我发现ORA-00942表或视图不存在错误 Caused by: Error : 942, Position : 21, Sql = SELECT UBIC_ID FROM LIST_UBICS , Error Msg = ORA-00942: table or view does not exist 我有一个文件,每行有一个id。此文件称为list_ubics.csv。我有一个文件模型和一个数据存储,指向名为LIST_UBIC的文件,带有UB

我正在尝试从PL/SQL过程中读取一个文件,但我发现ORA-00942表或视图不存在错误

Caused by: Error : 942, Position : 21, Sql = 
SELECT UBIC_ID FROM LIST_UBICS

, Error Msg = ORA-00942: table or view does not exist
我有一个文件,每行有一个id。此文件称为list_ubics.csv。我有一个文件模型和一个数据存储,指向名为LIST_UBIC的文件,带有UBIC_ID字段

我使用以下SQL在新过程中创建了一个任务:
从列表中选择UBIC\u ID\u UBICS

列表\u UBICS是我的数据存储,我没有任何具有这些名称的表

我想阅读这些文件,并对每一行进行一些处理,但我在文档中看不到任何方法来阅读适合我的文本文件

如何读取此文件


提前感谢您的帮助。

用PL/SQL(Oracle技术)编写的ODI过程将被下推到数据库上。正在执行的数据库不知道文件数据存储,无法对其执行SQL语句

如果目标是加载带有ODI的文件,则可以使用接口(11g)或带有LKM文件到SQL的映射(12c)来完成。这将把文件的内容复制到数据库中的一个表中,然后可以对其执行任何SQL语句


或者,也可以在数据库中创建一个目录,将文件放在那里,并在上面创建一个外部表。查询可以用于外部表,但不能用于DML操作。这里有更多信息:

我上周才发现还有一个解决方案,而且可能是最好的! 解决方案已经编写好了,如果您严格按照步骤操作,它就会工作(我实现了它)

无论如何,我将总结主要思想和步骤

我们可以在包中使用变量。有一个从给定文件中读取列的代码(请参见末尾的代码)。在包中生成for语句将帮助我们读取每一行,方法是从下面的代码中更改“CRFILE\u FIRST\u row”变量的值,以1开头的序号(

所以,一切都像上面那样简单。除了“CRFILE\U第一行”,还有更多可以更改的变量,如:CRFILE\U FORMAT=D(格式:十进制)、CRFILE\U SEP\U FIELD=0x0009(十六进制文件格式)等等

此外,正如您在原始文章(上面的链接)中所看到的,您可以生成视图代码;您不需要从下面复制粘贴

查看代码:

select  TES.C1  C1
from    location_of_file/objects_to_import.txt TES
/*$$SNPS_START_KEYSNP$CRDWG_TABLESNP$CRTABLE_NAME=TESTSNP$CRLOAD_FILE=location_of_file/objects_to_import.txtSNP$CRFILE_FORMAT=DSNP$CRFILE_SEP_FIELD=0x0009SNP$CRFILE_SEP_LINE=0x000ASNP$CRFILE_FIRST_ROW=#UTILS.IMPORT_OBJ_READ_INCRSNP$CRFILE_ENC_FIELD=SNP$CRFILE_DEC_SEP=SNP$CRSNP$CRDWG_COLSNP$CRCOL_NAME=C1SNP$CRTYPE_NAME=STRINGSNP$CRORDER=1SNP$CRLENGTH=50SNP$CRPRECISION=50SNP$CRACTION_ON_ERROR=NULLSNP$CR$$SNPS_END_KEY*/

映射(我使用的是12c)的问题是,如果这个ID存在,我必须在大视图(数百万个寄存器)中搜索文件中的每个ID,如果存在,则在目标表中插入。这是“一对一”检查是否存在是我在映射中无法做到的事情,如果我仅使用文件id和视图id放置联接,则执行总是会受阻。对于几百万行来说,联接不应该是问题。只需确保在两个表中的id属性上都有索引。并检查统计信息是否正确收集。如果是这样的话esn不起作用我上面建议的外部表格替代方案仍然是一个选项。