Forms 使用UTL在表中插入数据

Forms 使用UTL在表中插入数据,forms,oracle,plsql,oracle10g,oracle11g,Forms,Oracle,Plsql,Oracle10g,Oracle11g,朋友们,我写了一个代码,使用下面给出的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);

朋友们,我写了一个代码,使用下面给出的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 PRODUCTION 000017-nov-1981 005000.00 000000.0010所以请帮助我

这是因为程序将VARCHAR2作为第二个参数

如果您放置的不是varchar2,oracle会尝试隐式将其转换为正确的类型。
这对于数字非常有效,但是对于日期数据类型,oracle将使用
NLS\u Date\u格式
,该格式可能不符合文件中的字符串格式

您可以通过在
UTL\u文件中使用VARCHAR2来修复它。获取\u LINE
调用,然后使用
to\u date
函数将其转换为日期数据类型

但是,有一种更好的方法来完成这项工作-

您可以使用读取文件,然后插入并从中选择。

我发布了关于同一问题的新问题,请帮助我解决。非常感谢您的回复