create or replace procedure pro_testa as
begin
    insert into tabela(id,name) values(1,'OK');
    commit;  <-----提交
    exception 
        when others then 
            rollback;       <--------如果出错则回滚.
end

解决方案 »

  1.   

    过程中加commit提交,做异常处理,出现异常回滚,这样就可以实现事务处理的需求.,
      

  2.   

    --如果出错就会回滚的.--如果你想看错误号码和错误信息,
    create or replace procedure pro_testa(p_out out varchar2) asbegin
        insert into tabela(id,name) values(1,'OK');
        commit; 
        p_out:='错误号码'||sqlcode||','||'错误信息:'||sqlerrm;
        exception 
            when others then 
                rollback;       
                p_out:='错误号码'||sqlcode||','||'错误信息:'||sqlerrm;
    end
      

  3.   

    To dinya2003(OK) 1.如何返回Insert 中的ID?
    2.此过程(带输出参数)如何调用?谢谢关注
      

  4.   

    create or replace procedure PR_TEST(msg out varchar2) as
     (
    V000 "TEST".TEST%TYPE,
    V001 "TEST".ID%TYPE
    ) AS
      --DECLARE @Err int
      --BEGIN TRANSACTION
      --请加入事务处理
    BEGIN
      INSERT INTO "TEST"
      (
      TEST,
      ID
      )
      VALUES
      (
      V000,
      V001
      );
    commit;
    msg:='true';
    exception 
            when others then 
                rollback; 
                msg:='V001 ';
    END PR_TEST;
      

  5.   

    create or replace procedure pro_testa(p_id out number) as
        v_id number(8);
    begin
        select 序列的.nextval into v_id from dual;
        insert into tabela(id,name) values(v_id,'OK');
        commit;
        p_id:v_id;
        exception 
            when others then 
                rollback;       
                p_id:=-1;
    end--返回id,错误返回-1.
    --测试:SQL> set serverout on 
    SQL> variable dd number(8);
    SQL> execute pro_testa(:dd);
    SQL> select :dd from dual;
      

  6.   

    不太好意思继续问下去了
    实在是太菜了楼上几位给的存储过程没有问题,编译可以正常通过但我是在SqlPlus Worksheet中调用存储过程的
    例如我原来的调用如下:
    Begin
    PR_TEST('实施食盐','1234');
    END;可是加上传出参数后该如何调用呢,总提示个数和类型不正确
      

  7.   

    --测试上面的pro_testa过程,只有一个输出参数,如果有一个输入参数的,自己加一个.SQL> set serverout on 
    SQL> variable dd number(10);
    SQL> execute pro_testa(:dd);
    SQL> select :dd from dual;