俺是来学习的, 但是楼上的,你的函数sqlldr能认识吗?

解决方案 »

  1.   

    "问题是如果过滤的值列表来自一张表"
    ==================================既然这样,为什么不用如下的方法?
    insert into table_1 ...
    select xxx from table_2 
      

  2.   

    sqlldr的直接路径加载就不用说了,效率虽高但功能上就作了太多的限制,就sqlldr的一般数据加载来说,我们知道它实际上就是读取文本中的数据,然后构造一条一条的sql,做的是insert操作,
    而对整条记录的过滤,sqlldr只提供了skip和when,很明显这两种方法都是无法满足你的这种需求的
    when操作实际上就是在读取文本数据中所进行字符之间的比较,与数据库中的数据是没有什么联系的,所以会有后面只能接字符串和16位字符的限制,所以上面的写法会有问题
    如果要实现你的这种目的,光靠sqlloader估计是没什么希望了,如果要实现类似的功能,我想我们可以在导出的文本数据上或者在将文本导入后再进行二次处理都应该是可以接受的。说的不对的地方,大家多指正。
      

  3.   

    感谢各位指点,我很同意zmgowin(隐者(龙祖宗)) 的说法,但心理上却不太愿意接受,因为我需要导入的仅仅是文本数据量的1%,而数据量又比较大,两个数量级的存储以及速率差异诱惑实在太大了。
    对于数据文件的生成,我们原打算在源数据系统(异构系统,而且网络隔离)过滤,但正因为过滤条件来自我系统的一张表,才不得不放弃了这个设想。
    二次处理倒是除了动态控制文件的另一思路,不过当前这个系统中批量处理采用的是模块式结构,与主控模块间的接口只能是CTL文件,所以得去在主控模块处进行特殊处理。
    真是难为大家了。
    感谢抬贴,会赠分相谢
      

  4.   

    不明白楼主得意思,如果你数据来自一张表
    为啥不用
    insert into table
    select from table
    的形式?如果你要做成你想要的格式,而sql语句和sqlldr都无法实现
    那你可以写程序实现啊
      

  5.   

    个人感觉没什么好的办法。如果有1:99那样的数据比例,也不推荐导入后再过滤的方法。
    多组织些人,在EXCEL里过滤好了再导入吧。(EXCEL的有些功能还挺好用的)