日期:2014-05-16  浏览次数:20986 次

插入数据时文字与格式字符串不匹配
给出部门名、工号、姓名、工作日期 插入一个员工:
emp 和dept都是oracle安装时自带的表
创建过程:

create or replace procedure v_pro(d_name varchar2,e_no number,
                                                                      e_name varchar2,e_time varchar2) is
begin
     insert into emp (deptno,empno,ename,hiredate) values(
            (select deptno from dept where dname=d_name),e_no,e_name,to_date(e_time,'yyy-mm-dd ')
     );
end;

执行:

exec v_pro('ACCOUNTING',7799,'张三','2012-2-1');

执行报错:
ORA-01861: 文字与格式字符串不匹配
ORA-06512: 在 "SCOTT.V_PRO", line 3
ORA-06512: 在 line 1
还有个问题就是何时用动态sql和何时用静态sql 不是很清楚,只是知道静态解决不了了才用动态。
------解决方案--------------------
to_date(e_time,'yyy-mm-dd ') 的年份写错了,应该是yyyy-mm-dd,少了一个y.
 
------解决方案--------------------
其实静态和动态我们在使用的时候,就如你说的静态不够用的时候使用动态的。
编译的时间也不同,具体的对比就很多优缺点了,你可以去网上查询一下。

------解决方案--------------------
create or replace procedure v_pro(d_name varchar2,e_no number,e_name varchar2,e_time varchar2) 
is
v_deptno dept.deptno%type;
begin     
select deptno into v_deptno from dept where dname=d_name;
insert into emp(deptno,empno,ename,hiredate) values(v_deptno,e_no,e_name,to_date(e_time,'yyyy-mm-dd')); 
commit;
end; 
------解决方案--------------------
to_date(e_time,'yyy-mm-dd ')  少了个y
另外子查询中dname如果不是主键可能会出问题。