Search notes:

Oracle: ALTER SESSION DISABLE COMMIT IN PROCEDURE

After executing alter sesion dsiable commit in procedure, a PL/SQL procedure cannot end a transaction with either commit or rollback.
create table tq84_tab_commit_test (
   val number
);
Github repository Oracle-Patterns, path: /SQL/alter/session/commit-in-procedure/tab.sql
create or replace package tq84_pkg_commit_test as

    procedure do_something(val number);

end tq84_pkg_commit_test;
/

create or replace package body tq84_pkg_commit_test as

    procedure do_something(val number) is
    begin

        if val = -1 then
           commit;
           return;
        end if;

        if val = -2 then
           rollback;
           return;
        end if;

        insert into tq84_tab_commit_test values (val);

    end do_something;

end tq84_pkg_commit_test;
/
show errors
Github repository Oracle-Patterns, path: /SQL/alter/session/commit-in-procedure/pkg.sql
--
--    Default:
--
alter session enable commit in procedure;

begin
   tq84_pkg_commit_test.do_something( 1);
   tq84_pkg_commit_test.do_something( 2);
   tq84_pkg_commit_test.do_something( 3);
   tq84_pkg_commit_test.do_something(-1); -- commit
   tq84_pkg_commit_test.do_something( 4);
   tq84_pkg_commit_test.do_something( 5);
   tq84_pkg_commit_test.do_something(-2); -- rollback
end;
/

select * from tq84_tab_commit_test;

alter session disable commit in procedure;


--
-- Following block throws
--    ORA-00034: cannot COMMIT in current PL/SQL session
--
begin
   tq84_pkg_commit_test.do_something( 1);
   tq84_pkg_commit_test.do_something( 2);
   tq84_pkg_commit_test.do_something( 3);
   tq84_pkg_commit_test.do_something(-1); -- commit
end;
/

select * from tq84_tab_commit_test;
Github repository Oracle-Patterns, path: /SQL/alter/session/commit-in-procedure/exec.sql

Index

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 8 attempt to write a readonly database in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php:78 Stack trace: #0 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(78): PDOStatement->execute(Array) #1 /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php(30): insert_webrequest_('/notes/developm...', 1758198567, '216.73.216.150', 'Mozilla/5.0 App...', NULL) #2 /home/httpd/vhosts/renenyffenegger.ch/httpsdocs/notes/development/databases/Oracle/SQL/statement/nouns/session/alter/disable-enable/commit-in-procedure(109): insert_webrequest() #3 {main} thrown in /home/httpd/vhosts/renenyffenegger.ch/php/web-request-database.php on line 78