需要用sqlldr一次地把数据导入到表中,其中的content字段的值是外文件,外文件的名称在filename字段的值。现如下设计表
create table A
{
textID number(10),
filename varchar(30),
content blob
}
ctl文件是这样的:load data
append
fields   terminated   by   ","   
{
textID,
filename,
content  LOBFILE(filename)   TERMINATED   BY   EOF   
}
现在情况是这样:因为上游提供的filename的值,是一个单纯的文件名,比如aa.txt
我想在ctl文件中,将绝对路径和该文件名拼在一起,如 'D:\attact\aa.txt' 好让sqlldr直接到该位置找到该文件导入。
因此,我的sqlldr 写法如下:load data
append
fields   terminated   by   ","   
{
textID,
filename,
content  LOBFILE('D:\attact\'||filename)   TERMINATED   BY   EOF   
}
但这样写,执行时报错,log文件显示:sql*loader-649 引起来的字符串缺少右括号高人帮忙看看,如果要实现以上的要求,ctl文件要怎么写才行?因为刚注册的,只有20原始分。谢谢啦

解决方案 »

  1.   

    sql*loader-649 引起来的字符串缺少右括号 
    =========================
    load data 
    append 
    fields  terminated  by  ","  

    textID, 
    filename, 
    content  LOBFILE('D:\attact\'||filename)  TERMINATED  BY  EOF  

    改为
    load data 
    append 
    fields  terminated  by  ","  

    textID, 
    filename, 
    content  LOBFILE('D:\attact\aa.txt')  TERMINATED  BY  EOF  
      

  2.   

    你没看懂我的意思。我要程序自动根据filename的值去拼凑绝对路径,而不是写死在ctl中。
      

  3.   

    -- 查了下ORACLE文档, 试一下吧:
    Solution 1:content  LOBFILE(filename)  TERMINATED  BY  EOF  -- 路径直接写在数据文件中所对应的filename里
    Solution 2:content  LOBFILE(CONSTANT 'D:\attact\aa.txt')  TERMINATED  BY  EOF  -- 固定的文件名和路径
    Solution 3: content  LOBFILE(CONSTANT 'D:\attact\aa.txt'||filename)  TERMINATED  BY  EOF  -- 不知道对不对
      

  4.   

    拼路径的方法还是走不通,还是得把文件放在相应目录下sqlldr命令才能找到。