PROCEDURE a(
        P_YOSYA_SIGEN_NO    IN  VARCHAR2  
    )
    IS
        nYosyaSigenNo    NUMBER(10);
    BEGIN
        --情報不存在。
        SELECT COUNT(*) INTO nYosyaSigenNo FROM YOSYASIGEN WHERE YOSYA_SIGEN_NO = P_YOSYA_SIGEN_NO;
        IF nYosyaSigenNo = 0 THEN 
            RAISE_APPLICATION_ERROR(-20207,'指定情報不存在');
        END IF;        --削除行。
        DELETE FROM YOSYASIGEN WHERE YOSYA_SIGEN_NO = P_YOSYA_SIGEN_NO;        COMMIT;    EXCEPTION
        --Exception
        WHEN OTHERS THEN
            ROLLBACK;
            --RETURN SQLERRM;    END a;如上面的例子,里外是处理了,但外界怎么知道呢?

解决方案 »

  1.   

    在过程中添加一个输出参数:
    create or replace procedure(p_out out number) as 
    begin
        insert into ....
        commit;
        p_out:=0;  --成功执行
        return ;
        exception 
            when others then 
                p_out:=1;  --错误
                rollback;
                return ;
    end ;--或触发异常,类似下面的写法
    create or replace trigger dinya_testa
        before delete on testa
        for each row
    begin 
        raise_application_error(-20003,'不能删除数据');
    end;