create or replace procedure ADMIN.p_selectCourse( 
p_teachId in number, 
p_courseNumber in  varchar2(20), 
p_studentNumber in  varchar2(18),
p_error out number )
is
i INTEGER;
begin
  select studentMaxNumber into i from publicCourseTeach where teachId=p_teachId;
  SAVEPOINT p1;
  if  i> 0  then
    update publicCourseTeach set studentMaxNumber=studentMaxNumber-1 where teachId=p_teachId ;
    insert into studentSelectCourseInfo(studentNumber,courseNumber)  values(p_studentNumber,p_courseNumber) ; 
    commit ;
    if sqlcode == 0 then
       p_error:=1;
       dbms_output.put_line(p_error);
    else           
 rollback to p1;  
       p_error:=0;
     dbms_output.put_line(p_error);
    end if;
 else
   p_error:=-1;
 dbms_output.put_line(p_error);
 end if;
end ;

解决方案 »

  1.   

    回退至保存点,必须是在没有commit之前,commit之后,保存点就没有意义了
      

  2.   

    确保studentMaxNumber只有一个值返回
    if中的等于就是=
      

  3.   

    if sqlcode == 0 then写一个等号就可以了。
      

  4.   

    p_courseNumber in  varchar2(20), 
    p_studentNumber in  varchar2(18),参数,只写类型,不要写长度。
      

  5.   

    只留框架当然不行了,begin end中间,最少要有一条语句。如果实在没得写,要写成这样begin 
    null;
    end
      

  6.   

    调用这个存储在去commit 。