create or replace procedure pro_addstu
(p_id in graduate_info.id%type,
p_name in graduate_info.name%type,
p_sex in graduate_info.sex%type,
p_birthday in graduate_info.birthday%type,
p_classno in graduate_info.classno%type,
p_major in graduate_info.major%type,
p_director in graduate_info.director%type,
p_source in graduate_info.source%type,
p_score in graduate_info.score%type,
p_bonus in graduate_info.bonus%type,
v_re out number)
as
v_count number;
v_expt exception;
v_expt1 exception;
cursor exit_cursor is select count(*) from graduate_info where name=p_name;begin
if p_name is null then
    raise v_expt;--学生姓名不能为空
end if;
open exit_cursor;
fetch exit_cursor into v_count;
if v_count>0 then
      raise v_expt1;--学生名称已经存在
 else
     
insert into graduate_info values(id.NEXTVAL,p_name,p_sex,p_birthday,p_classno,p_major,p_director,p_source,p_score,p_bonus);
v_re:=1;--增加成功返回1
     end if; 
close exit_cursor;
exception
     when v_expt then
         v_re:=0;
     when v_expt1 then
         v_re:=-1;
end;)

解决方案 »

  1.   

    你select count(*)干吗用个游标啊,直接定义个number select into不就好啦。个人建议,观望中。
      

  2.   

    http://topic.csdn.net/u/20091128/01/170e3470-31eb-4a5b-aa34-d0e138985bcd.html?24801
      

  3.   

     exit_cursor 既然是游标,就不能是select count(*)number型
      

  4.   

    声明一个数字类型接受count(*)的值就可以了,select into
      

  5.   

    create or replace procedure pro_addstu 
    (p_id in graduate_info.id%type, 
    p_name in graduate_info.name%type, 
    p_sex in graduate_info.sex%type, 
    p_birthday in graduate_info.birthday%type, 
    p_classno in graduate_info.classno%type, 
    p_major in graduate_info.major%type, 
    p_director in graduate_info.director%type, 
    p_source in graduate_info.source%type, 
    p_score in graduate_info.score%type, 
    p_bonus in graduate_info.bonus%type, 
    v_re out number) 
    as 
    v_count number; 
    v_expt exception; 
    v_expt1 exception; begin select count(*) into v_count from graduate_info where name=p_name;if p_name is null then 
        raise v_expt;--学生姓名不能为空 
    end if; 
    open exit_cursor; if v_count>0 then 
          raise v_expt1;--学生名称已经存在 
    else 
        
    insert into graduate_info values(id.NEXTVAL,p_name,p_sex,p_birthday,p_classno,p_major,p_director,p_source,p_score,p_bonus); 
    v_re:=1;--增加成功返回1 
        
    end if; exception 
        when v_expt then 
            v_re:=0; 
        when v_expt1 then 
            v_re:=-1; 
    end;) 
      

  6.   

    create or replace procedure pro_addstu 
    (p_id  in graduate_info.id%type, 
    p_name  in graduate_info.name%type, 
    p_sex  in graduate_info.sex%type, 
    p_birthday  in graduate_info.birthday%type, 
    p_classno  in graduate_info.classno%type, 
    p_major  in graduate_info.major%type, 
    p_director  in graduate_info.director%type, 
    p_source  in graduate_info.source%type, 
    p_score  in graduate_info.score%type, 
    p_bonus  in graduate_info.bonus%type, 
    v_re  out number) 
    as 
    v_count number  := 0; 
    --v_expt  exception; 
    --v_expt1 exception; 
    --cursor exit_cursor is select count(*) from graduate_info where name=p_name; begin 
    if p_name is null then
    v_re := 0; 
    --raise v_expt;--学生姓名不能为空 
    end if; 
    select count(*) into v_count from graduate_info where name=p_name; 
    --open exit_cursor; 
    --fetch exit_cursor into v_count; 
    if v_count>0 then 
    v_re := -1; 
    --raise v_expt1;--学生名称已经存在 
    else 
    insert into graduate_info values(id.NEXTVAL,p_name,p_sex,p_birthday,p_classno,p_major,p_director,p_source,p_score,p_bonus); 
    v_re := 1;--增加成功返回1 
    end if; 
    --close exit_cursor; 
    exception 
    /*
    when v_expt then 
    v_re := 0; 
    when v_expt1 then 
    v_re := -1; */
    when others then
    raise;
    end pro_addstu;
    /