Cursor Oracle PLSQL

SQL>
SQL> create table myTable2 ( cnt int );
Table created.
SQL>
SQL> insert into myTable2 values ( 0 );
1 row created.
SQL>
SQL> create table t ( x int check ( x>0 ) );
Table created.
SQL>
SQL> create trigger t_trigger before insert or delete on t for each row
  2  begin
  3     if ( inserting ) then
  4          update myTable2 set cnt = cnt +1;
  5     else
  6          update myTable2 set cnt = cnt -1;
  7     end if;
  8     dbms_output.put_line( 'fired and updated '  || sql%rowcount || ' rows' );
  9  end;
 10  /
Trigger created.
SQL>
SQL> create or replace procedure p
  2  as
  3  begin
  4          insert into t values ( 1 );
  5          insert into t values (-1 );
  6  end;
  7  /
Procedure created.
SQL> select * from t;
no rows selected
SQL> select * from myTable2;
       CNT
----------
         0
SQL> begin
  2          p;
  3  end;
  4  /
fired and updated 1 rows
fired and updated 1 rows
begin
*
ERROR at line 1:
ORA-02290: check constraint (RNTSOFT.SYS_C0010265) violated
ORA-06512: at "RNTSOFT.P", line 5
ORA-06512: at line 2
SQL> select * from t;
no rows selected
SQL> select * from myTable2;
       CNT
----------
         0
SQL>
SQL>
SQL> begin
  2      p;
  3  exception
  4      when others then null;
  5  end;
  6  /
fired and updated 1 rows
fired and updated 1 rows
PL/SQL procedure successfully completed.
SQL> select * from t;
         X
----------
         1
SQL> select * from myTable2;
       CNT
----------
         1
SQL>
SQL> rollback;
Rollback complete.
SQL>
SQL> begin
  2      savepoint sp;
  3      p;
  4  exception
  5      when others then
  6          rollback to sp;
  7  end;
  8  /
fired and updated 1 rows
fired and updated 1 rows
PL/SQL procedure successfully completed.
SQL> select * from t;
no rows selected
SQL> select * from myTable2;
       CNT
----------
         0
SQL>
SQL>
SQL>
SQL> drop table t;
Table dropped.
SQL> drop table myTable2;
Table dropped.