首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

oracle PL/SQL 有关问题

2012-06-22 
oracle PL/SQL 问题先选出符合条件的记录,再将表中的一列日期(本来是空)update为birthday+18*12个月。下面

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;

热点排行