create or replace procedure MYPROCEDURE(workyear In varchar2,cdate in date) As
v_nid       varchar2(100);
v_time      date;
Begin
     v_nid :=workyear;
     v_time:=cdate;
     update s_work_year set workyear=v_nid,cdate=v_time;
     update t_gys_sequence set year = workyear;
     update t_cl_sequence  set year = workyear;
     update t_hq_sequence  set year = workyear;
     update t_gys_empty_number set year = workyear;
     update t_cl_empty_number  set year = workyear;
     update t_hq_empty_number  set year = workyear;
end MYPROCEDURE;引用:
CallableStatement proc = null;
proc = conn.prepareCall("{CALL MYPROCEDURE(?,?)}");
            proc.setString(1,year);     
            proc.setDate(2, new java.sql.Date(new java.util.Date().getTime()));
            int  flag = proc.executeUpdate();
            System.out.println(flag);
   return flag; 执行后数据已经更新,但是flag为什么总为0呢?

解决方案 »

  1.   

    executeUpdate()返回的不是更新的条数吗?正确结果是不是应该是1呢?
      

  2.   

    在存储过程中定义个flgUpdate变量,用来标示是否更新成功.如MYPROCEDURE(workyear In varchar2,cdate in date,out flgUpdate) 然后在程序中取得此变量就可以了.
      

  3.   

    指定需要返回的参数为out的。
      

  4.   

    procedure是没有返回值的。可以通过out参数来达到返回值的目的。
      

  5.   

    存储过程没有返回值存储过程的返回值需要在入参里面定义MYPROCEDURE(workyear In varchar2,cdate in date,flgUpdate out int) 
      

  6.   

    create or replace procedure MYPROCEDURE(workyear In varchar2,cdate in date,updateflg out integer) is
    v_nid      varchar2(100); 
    v_time      date; 
    Begin 
             updateflg :=1;  
        v_nid :=workyear; 
        v_time:=cdate; 
        update s_work_year set workyear=v_nid,cdate=v_time; 
        update t_gys_sequence set year = workyear; 
        update t_cl_sequence  set year = workyear; 
        update t_hq_sequence  set year = workyear; 
        update t_gys_empty_number set year = workyear; 
        update t_cl_empty_number  set year = workyear; 
        update t_hq_empty_number  set year = workyear; 
    Exception When others then
             updateflg :=0;         end MYPROCEDURE;