declare
dno number(4);
dname varchar2(5);
ddate date;
dbasic number(10);
djob varchar2(15);
dcomm number(5);
dept number(5);
dmgr number(5);
begin
select empno,ename,hiredate,sal,job1,comm,deptno,mgr
into dno,dname,ddate,dbasic,djob,dcomm,dept,dmgr
from emp
where empno=&userno;
if sql%rowcount>0
then
insert into newempl
values(dno,dname,djob,dmgr,ddate,dbasic,dcomm,dept);
dbms_output.put_line('records inserted into it');
dbms_output.put_line(dno||' '||dname||' '||ddate||' '||dbasic);
end if;
end;
错误报告:
ORA-01858: a non-numeric character was found where a numeric was expected
ORA-06512: at line 19
01858. 00000 - "a non-numeric character was found where a numeric was expected"
*Cause: The input data to be converted using a date format model was
incorrect. The input data did not contain a number where a number was
required by the format model.
*Action: Fix the input data or the date format model to make sure the
elements match in number and type. Then retry the operation.
我不明白错误是什么。
答案 0 :(得分:1)
从错误消息中看起来您正在将值插入错误的列中。没有看到你的表结构(例如来自describe newmpl
)这是一个猜测,但这句话:
insert into newempl
values(dno,dname,djob,dmgr,ddate,dbasic,dcomm,dept);
...假设newempl
表中的列按特定顺序排列,可能不是(也可能不是)。更具体地说,我认为它抱怨hiredate
,因为你隐含地将djob
值放在该列中 - 假设新表格看起来像emp
- 而djob
} value无法转换为日期。
根据评论进行更新:从您创建表格的方式来看,这相当于:
insert into newempl(dno, dname, ddate, dbasic, djob, dcomm, dept, dmgr)
values(dno,dname,djob,dmgr,ddate,dbasic,dcomm,dept);
...因此,您可以看到它的布局时间与列未对齐,您确实试图将djob
值放入ddate
列,而不会工作
显式指定列总是更安全,既可以防止不同环境中不同排序的问题(尽管对于受控代码不应该发生这种情况),并且如果添加了新列,则可以防止这种情况发生。类似的东西:
insert into newempl(empno,ename,jon1,mgr,hiredate,sal,comm,deptno)
values(dno,dname,djob,dmgr,ddate,dbasic,dcomm,dept);
另外,在声明您的局部变量时,您可以指定它们based on the table,例如dno emp.empno%TYPE
。另外,根据您的评论,我建议为表格列提供不同的名称,以避免混淆。
正如a_horse_with_no_name所说,这可以通过简单的SQL插入来完成,甚至在PL / SQL块中也不需要单独的select
和insert
语句;你可以这么做:
insert into newempl(empno,ename,jon1,mgr,hiredate,sal,comm,deptno)
select empno,ename,jon1,mgr,hiredate,sal,comm,deptno
from emp
where empno=&userno;
不幸的是,由于您没有对mgr
列做任何事情,因此这些都不能满足“作为经理的员工必须插入新表”的要求。我不认为在这一点上为你完成这部分任务是有建设性的,而且我不确定&userno
在哪里适合。