插入数据时文字与格式字符串不匹配
给出部门名、工号、姓名、工作日期 插入一个员工:
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如果不是主键可能会出问题。