先选出符合条件的记录,再将表中的一列日期(本来是空)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;

解决方案 »

  1.   

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

  2.   


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

  3.   

    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;
      

  4.   

    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;
      

  5.   

    没有必要通过游标检索,可以直接进行更新的
    update tablename set engtheenbir=add_months(birthday,18*12);