【问题标题】:Inserting data in table using UTL使用 UTL 在表中插入数据
【发布时间】:2012-05-30 06:43:51
【问题描述】:

朋友们,我已经编写了一个代码来使用我在下面给出的 UTL 代码在 newemp 表中上传数据,但我得到了错误

  1  declare
  2       EMPNO     NUMBER(4);
  3       ENAME      VARCHAR2(10);
  4       JOB       VARCHAR2(10);
  5       MGR       NUMBER(4);
  6       HIREDATE  DATE;
  7       SAL       NUMBER(7,2);
  8       COMM      NUMBER(7,2);
  9       DEPTNO    NUMBER(2);
 10       line varchar2(100);
 11       namesfile UTL_FILE.FILE_TYPE;
 12      begin
 13       namesfile :=UTL_FILE.FOPEN('DIPRJDIR','empdata.txt','R');
 14       loop
 15       UTL_FILE.GET_LINE(namesfile,EMPNO,4);
 16       dbms_output.put_line('EMPNO :' || EMPNO);
 17       UTL_FILE.GET_LINE(namesfile,ENAME,10);
 18       dbms_output.put_line('ENAME :' || ENAME);
 19       UTL_FILE.GET_LINE(namesfile,JOB,9);
 20       dbms_output.put_line('JOB :' || JOB);
 21       UTL_FILE.GET_LINE(namesfile,MGR,4);
 22       dbms_output.put_line('MGR :' || MGR);
 23       UTL_FILE.GET_LINE(namesfile,HIREDATE,5);
 24       dbms_output.put_line('HIREDATE :' || HIREDATE);
 25       UTL_FILE.GET_LINE(namesfile,SAL,9);
 26       dbms_output.put_line('SAL :' || SAL);
 27       UTL_FILE.GET_LINE(namesfile,COMM,9);
 28       dbms_output.put_line('COMM :' || COMM);
 29       UTL_FILE.GET_LINE(namesfile,DEPTNO,2);
 30       dbms_output.put_line('DEPTNO :' || DEPTNO);
 31       insert into newemp values(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO);
 32       end loop;
 33       utl_file.fclose(namesfile);
 34*      end;
SQL> /
EMPNO :7839
ENAME :KING
JOB :PRESIDENT
MGR :0

ERROR

declare
*
ERROR at line 1:
ORA-01843: not a valid month
ORA-06512: at line 23

我的数据格式如下 7839KING PRESIDENT 000017-nov-1981 005000.00 000000.0010 所以请帮帮我

【问题讨论】:

    标签: forms oracle plsql oracle10g oracle11g


    【解决方案1】:

    这是因为UTL_FILE.GET_LINE 过程将 VARCHAR2 作为第二个参数。

    如果您放置的不是 varchar2,oracle 会尝试将其隐式转换为正确的类型。
    这对您来说非常适用于数字,但对于 Date 数据类型,oracle 将使用可能不符合文件中字符串格式的NLS_DATE_FORMAT

    您可以通过在 UTL_FILE.GET_LINE 调用中使用 VARCHAR2 来修复它,然后使用 to_date 函数将其转换为日期数据类型。

    但是,有更好的方法来完成这项工作-
    您可以使用external table 读取文件,然后从中读取insert-select

    【讨论】:

    • 我发布了关于相同问题的新问题,请帮助我。非常感谢回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多