Forms 使用UTL在表中插入数据
朋友们,我写了一个代码,使用下面给出的UTL代码上传newemp表中的数据,但我得到了错误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);
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
函数将其转换为日期数据类型
但是,有一种更好的方法来完成这项工作-您可以使用读取文件,然后插入并从中选择。我发布了关于同一问题的新问题,请帮助我解决。非常感谢您的回复