日期:2014-05-17  浏览次数:20670 次

oracle PL/SQL 问题
先选出符合条件的记录,再将表中的一列日期(本来是空)update为birthday+18*12个月。
下面一直报错说 文字与格式字符串不匹配,为何

declare

--游标
CURSOR test_cur IS
  SELECT id ,birthday FROM tablename;

begin
for rec in test_cur loop
--更新 
  update tablename set engtheenbir = add_months(to_char(rec.birthday,'yyyymm'),18*12) where id = rec.id;
end loop;
--提交
commit;

end;


------解决方案--------------------
SQL code

update tablename set engtheenbir = to_char(add_months(rec.birthday,18*12),'yyyymm') 
where id = rec.id;

------解决方案--------------------
add_months(to_char(rec.birthday,'yyyymm'),18*12)
add_months函数第一个参数变成了字符串,它需要的是日期参数

如果只是想取生日的月份,可以这样
update tablename set engtheenbir = add_months(to_date(to_char(rec.birthday,'yyyymm'),'yyyymm'),18*12) where id = rec.id;

如果只是简单加月份:
update tablename set engtheenbir = add_month(rec.birthday,18*12) where id = rec.id;
------解决方案--------------------
add_months::=
功能
返回比日期d大n个月的日期,参数n可以是任意整数。如果d是该月份的最后一天,或者返回值月份的天数比日期d的天数少,则返回值是应返回月份的最后一天;否则返回值与d的日期中的天(day)是一致的。

update tablename set engtheenbir = add_months(to_date(to_char(rec.birthday,'yyyymm'),'yyyymm'),18*12) where id = rec.id;

如果只是简单加月份:
update tablename set engtheenbir = add_month(rec.birthday,18*12) where id = rec.id;