本帖最后由 a7771157 于 2010-06-16 09:00:29 编辑

解决方案 »

  1.   

    CREATE or REPLACE PROCEDURE set_death_age(name president.pres_name%TYPE,
    age NUMBER,message OUT VARCHAR2)
    IS
    BEGIN
    UPDATE PRESIDENT  
    SET death_age=age
    where pres_name=name;
    message:='death age entered.';
    --return message;
    EXCEPTION
    WHEN no_data_found THEN
    RAISE_APPLICATION_ERROR(-20004,'The president doesn''t exist!');
    when OTHERS THEN
    RAISE_APPLICATION_ERROR(-20005,'The VALUE has already exist.');
    end;
      

  2.   

    我试过了,还是不行。每次加上exception都会出现这种问题,应该跟返回值无关
      

  3.   


    存储过程是不能有返回值的,有返回值的是函数。看看楼主的SQL语句,确实最后缺少一个'END;'关键字哦。
      

  4.   


    --函数中才能有return的
    --试试这样看看
    CREATE or REPLACE PROCEDURE set_death_age(name president.pres_name%TYPE,
    age NUMBER,message OUT VARCHAR2)
    IS
    BEGIN
    UPDATE PRESIDENT  
    SET death_age=age
    where pres_name=name;
    message:='death age entered.';
    commit;
    EXCEPTION
    WHEN no_data_found THEN
    dbms_output.put_line('The president doesn''t exist!');
    when OTHERS THEN
    dbms_output.put_line('The VALUE has already exist.');
    end;
      

  5.   

    no_data_found 这个异常怎么好像没有定义哦,基本上没作用啊!
      

  6.   

    刚说错了,不是没有定义;个人觉得,no_data_found 这个异常应该在判断没有这个人的时候抛出吧,不然好像没啥作用
      

  7.   

    过程不能有return ;去掉return message;最后加上一个  end; 
    就行了