如下sql语句:
update MerchandiseBase set printDate = (case when printDate is not null then to_char(to_date(printDate, 'YYYY-MM-DD')+1, 'YYYY-MM-DD') else '' end)
在sqlplus执行是成功但是把如下:
create or replace procedure modify_pro as 
begin
update MerchandiseBase set printDate = (case when printDate is not null then to_char(to_date(printDate, 'YYYY-MM-DD')+1, 'YYYY-MM-DD') else '' end)
end
在sqlplus下执行就报编译性错误:
Warning: Procedure created with compilation errors.到底哪里错了,我自己都糊涂了,今儿事真多,真的糊涂了

解决方案 »

  1.   

    create or replace procedure modify_pro as 
    begin
    update MerchandiseBase set printDate = (case when printDate is not null then to_char(to_date(printDate, 'YYYY-MM-DD')+1, 'YYYY-MM-DD') else '' end);
    end;
    /下面的写法是不是更加容易看懂
    create or replace procedure modify_pro as 
    begin
    update MerchandiseBase set printDate = to_char(to_date(printDate, 'YYYY-MM-DD')+1, 'YYYY-MM-DD') where printDate is not null ;
    end;
    /
      

  2.   

    create or replace procedure modify_pro as 
    begin
    update MerchandiseBase set printDate = (case when printDate is not null then to_char(to_date(printDate, 'YYYY-MM-DD')+1, 'YYYY-MM-DD') else '' end);
    end;
    /
    试试。
      

  3.   

    show error;
    看看提示的编译错误是什么
      

  4.   

    sql语句的结尾要加;
    end 后面也要加 ;
      

  5.   

    比较好的编译工具是pl/sql developer 如果初学的话,使用这个工具包编译
    并调试存储过程比较好
      

  6.   

    可以用decode的,可读性强一些update MerchandiseBase set printDate = 
           DECODE(null,'',to_char(to_date(printDate, 'YYYY-MM-DD')+1, 'YYYY-MM-DD'));
      

  7.   

    create or replace procedure modify_pro as 
    begin
    update MerchandiseBase set printDate = (case when printDate is not null then to_char(to_date(printDate, 'YYYY-MM-DD')+1, 'YYYY-MM-DD') else '' end);--少了
    end
    少了一个分号.