Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Path SQLLDR:动态加载连接完整路径和文件名的lobfile_Path_Concatenation_Sql Loader - Fatal编程技术网

Path SQLLDR:动态加载连接完整路径和文件名的lobfile

Path SQLLDR:动态加载连接完整路径和文件名的lobfile,path,concatenation,sql-loader,Path,Concatenation,Sql Loader,我使用sQLLDER(11g)将数据加载到表中。其中一列是BLOB,需要从另一个文件加载。文件名取决于表的字段,我需要连接完整路径才能加载文件。因此,为了获得文件的完整路径,我需要将文件夹路径“/oradata/val/”与字段ID_建议加上扩展名“.dat”连接起来;例如,如果字段ID_建议为“1”,则文件名应为“/oradata/val/1.dat”。我无法修改原始文件,因此我想使用表达式获取文件的完整路径,使用类似以下内容: LOAD DATA INFILE * INTO TABLE t_

我使用sQLLDER(11g)将数据加载到表中。其中一列是BLOB,需要从另一个文件加载。文件名取决于表的字段,我需要连接完整路径才能加载文件。因此,为了获得文件的完整路径,我需要将文件夹路径“/oradata/val/”与字段ID_建议加上扩展名“.dat”连接起来;例如,如果字段ID_建议为“1”,则文件名应为“/oradata/val/1.dat”。我无法修改原始文件,因此我想使用表达式获取文件的完整路径,使用类似以下内容:

LOAD DATA
INFILE *
INTO TABLE t_val_recommendation append
fields terminated by ';'
(
  ID_RECOMMENDATION,
  ID_PROFILE       ,
  START_DATE       date 'yyyymmdd',
  LOBF_00001       BOUNDFILLER"trim('/oradata/val/'||:ID_RECOMMENDATION||'.dat')",
  PARAGRAPHS       LOBFILE (LOBF_00001) TERMINATED BY EOF,
  ASSET_ALLOCATION
)
但它似乎不理解路径和文件名的连接。我该怎么做

谢谢

(编辑以澄清含义)

这是表架构:

  ID_RECOMMENDATION  NUMBER(10)                 NOT NULL,             
  ID_PROFILE         VARCHAR2(10 BYTE)          NOT NULL,
  START_DATE         DATE                       NOT NULL,
  PARAGRAPHS         SYS.XMLTYPE,
  ASSET_ALLOCATION   SYS.XMLTYPE
这将是一个要加载的行:

1;CONSERVATIVE;20120301;<aa>This is my asset allocation</aa>
1;保守的20120301;这是我的资产配置

我不确定修改正在加载的现有文件会有多困难,但是否可以修改这些文件,使其包含正确的文件路径?您可以使用Java或其他文本处理语言将该ID_建议与“/oradata/val/”和“.dat”连接起来并保存文件,然后使用

有许多语言易于学习和进行文本文件转换。Java、Perl和C是我想到的三种语言,但还有很多其他的

我想说,从长远来看,将文本文件设置为SQLLDR易于使用的格式是非常值得的

LOBF_00001       BOUNDFILLER"trim('/oradata/val/'||:ID_RECOMMENDATION||'.dat')"
我觉得这是个错误:

  • 如果这是一个
    BOUNDFILLER
    ,则表示在表
    t\u val\u recommendation
    中没有名为
    LOBF\u 00001
    的列,但ctl文件的数据部分中有数据,您希望使用它并将其存储到
    LOBF\u 00001
    变量中,可用于计算其他表达式的
  • 如果这是一个
    表达式
    ,则意味着表中有一列名为
    LOBF_00001
    ,但ctl文件的数据部分中没有数据

看起来您试图跳过“LOBF_00001”列的加载,但您希望稍后使用它,对吗?不完全是这样。我想加载文件夹/oradata/val中的xml文件,名称是记录的字段IF_。我希望能够连接路径和文件名,并将其加载到字段段落中。请在BEGINDATA行之后添加表架构和CTL的一个示例行,以便我们知道哪个数据字段映射到数据库中的哪个列外部表是可能的吗?如果您确实必须使用SQLLDR,我将停止建议其他方法,但在我看来,使用不同的方法比您现在使用的方法更简单、更容易。最终,我只是想提出一些方法来帮助您解决问题……我只是添加了表模式和一个示例行,我知道这一点。我希望有其他的方法可以做到这一点,因为同一个文件需要加载到其他服务器上,路径会发生变化。我只是不明白为什么在任何普通字段上都可以进行这样的操作,但在填充字段中却不行。这有点荒谬。
LOBF_00001       BOUNDFILLER"trim('/oradata/val/'||:ID_RECOMMENDATION||'.dat')"