×

Loading...
Ad by
  • 最优利率和cashback可以申请特批,好信用好收入offer更好。请点链接扫码加微信咨询,Scotiabank -- Nick Zhang 6478812600。
Ad by
  • 最优利率和cashback可以申请特批,好信用好收入offer更好。请点链接扫码加微信咨询,Scotiabank -- Nick Zhang 6478812600。

关于SQLLDR中出现的问题

一个TABLE T中, COLUMN A被定义为NUMBER(20,2).
DATA FILE为TXT, 不同COLUMN的数值之间用";"分隔, A对应的数值是这样的: -00000029.88 或者 000000000.00 或者 000000030.12
CONTROL FILE中:
LOAD DATA
INTO TABLE T
APPEND
WHEN srce_file_name != ' '
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
( ..., A, ....)

在使用SQLLDR的时候, 出错,说A是INVALID NUMBER.

尝试以下各办法, 均失败:
* 使用"TRIM(:A)"或者"TO_NUMBER(:A)"也出同样的错误.
* 先把数据文件做REFORMATE, 数字格式全部都标准化, 例如成为0.01 或者-325.68, 还是无法导入数据库, 同样错误内容。
* 系统重新安装后, 立即只安装ORACLE, 还是出错. 同样内容.

另外, 通过TOAD的schema browser可以正常填加这样的记录.

所以,一定是与SQLLDR有关的什么问题,请哪位大侠出手相助啊。。。谢谢。谢谢.....
Report

Replies, comments and Discussions:

  • 工作学习 / 专业技术讨论 / 关于SQLLDR中出现的问题
    一个TABLE T中, COLUMN A被定义为NUMBER(20,2).
    DATA FILE为TXT, 不同COLUMN的数值之间用";"分隔, A对应的数值是这样的: -00000029.88 或者 000000000.00 或者 000000030.12
    CONTROL FILE中:
    LOAD DATA
    INTO TABLE T
    APPEND
    WHEN srce_file_name != ' '
    FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
    ( ..., A, ....)

    在使用SQLLDR的时候, 出错,说A是INVALID NUMBER.

    尝试以下各办法, 均失败:
    * 使用"TRIM(:A)"或者"TO_NUMBER(:A)"也出同样的错误.
    * 先把数据文件做REFORMATE, 数字格式全部都标准化, 例如成为0.01 或者-325.68, 还是无法导入数据库, 同样错误内容。
    * 系统重新安装后, 立即只安装ORACLE, 还是出错. 同样内容.

    另外, 通过TOAD的schema browser可以正常填加这样的记录.

    所以,一定是与SQLLDR有关的什么问题,请哪位大侠出手相助啊。。。谢谢。谢谢.....
    • 再扑!!!!!!!!!!!!
      • 我试了一下这样可以的,主要to_number的使用
        winxp/oracle9i:

        表:
        create table SCOTT.A
        (
        NAME VARCHAR2(10),
        AC NUMBER(20,2)
        )

        控制文件:
        Load data
        into table A
        Append
        fields terminated by ","
        (
        Name,
        AC "to_number(:AC,'999999999.99')"
        )

        数据文件:
        zf,000000023.45
        df,000000234.12
        • still didn't work....it is not the simple problem about the function....I can't load any number with decimal from a plain txt file....
          • 你用我提供的这些文件,在你机器上执行也通不过??? 我是在我机器上试成功的
            • unluckly yes.....must be something wrong with Oracle ddl, but i don't know where is it and how to fix it....
              • 你试试以字符串的方式load到另一个表中,然后写个sp insert倒你的表中,在sp里用to_number转换类型。
                • crazy....
                  I created a table, T_CHAR, almost same as T except column A is defined as vchar2.

                  sqlldr was successful when loading data from the text file to this table.

                  then I used this script:
                  insert into t select ..., to_number(A) , ... from t_char;

                  unfortunately, same error message appeared: ORA-01722, invalid number.....

                  I am so mad about this stupid error....
                  • 我上面不是说换换to_number的用法吗?你没试? 换成这样应该可以to_number(:AC,'999999999.99')
                    • 试完了请回个结果贴,我也在这纳闷好几天了.呵呵
                      • 如果是这样的话,我觉得问题不是出在SQLLDR,使出现在你的数据中,你应该检查一下你的数据是否又出现小数点后多于两位的坏数据在里面。
                        • 数据绝对没错, 因为在其他的机器上试过, 不用TO_NUMBER都可以的...
                      • 呵呵。。。我就是试过了呀。。。肯定不是一个函数那么简单的问题。。。
                  • 你的crazy...这个帖子里,to_number显然没有用 to_number(A,'999999999.99')吗? 试了也不行???这也太怪了...
                    • 你是试这样把 to_number(trim(a))
                    • Thanks, all nice guys here. I worked it out.
                      the trick is i should put enough '9' in the format expression coz my raw data are quite long...So, control file works perfectly now.

                      BTW, i did use '9' in to_number function, though it was not as many as the system wanted.
                      • 有始有终,赞一个
                        • thanks. i'm also very happy about that. :-)