declare
  begin
  for i in  reverse  0..364 loop
  insert into mgs_psd_report(F1) select to_char(trunc(to_date('&a-12-01','yyyy-mm-dd'),'yy')+i,'yyyy-mm-dd') from dual;
  end loop;
  end;报错 ORA-01841:完整的年份值必须介于-4713和+9999之间且不为0

解决方案 »

  1.   

    格式错了,你年份是yyyy代表输入4为年份数字,你输入的两位,还是非数字,不报错才怪。
      

  2.   


    语法没错   我试了成功   看是你的替代变量&a输入值的时候 必须是四位的 
    SQL> create table mgs_psd_report(f1 varchar2(20));表已创建。SQL> declare
      2    begin
      3    for i in reverse 0..364 loop
      4    insert into mgs_psd_report(F1) select to_char(trunc(to_date('&a-12-01','yyyy-mm-dd'),'yy')+i,
    'yyyy-mm-dd') from dual;
      5    end loop;
      6    end;
      7  /
    输入 a 的值:  2010
    原值    4:   insert into mgs_psd_report(F1) select to_char(trunc(to_date('&a-12-01','yyyy-mm-dd'),'yy')
    新值    4:   insert into mgs_psd_report(F1) select to_char(trunc(to_date('2010-12-01','yyyy-mm-dd'),'yyPL/SQL 过程已成功完成。
      

  3.   

    楼主的语句是对的,输入参数正确么?
    不过语句是不是有点冗余了,trunc了已经截取位了啊,select to_char(to_date('&a-01-01','yyyy-mm-dd'),'yyyy-mm-dd') from dual
      

  4.   

    程序没错,for i in reverse 0..364 loop 超出了-4713和+9999区间。