Если вкратце, то - нельзя! Все они на самом деле в одной транзакции(естественно, если не выполнять внутри них автономных).
Тестовая табличка:
create table TEST_TR(i INTEGER);Java код:
create or replace and compile java source named jdbcconnections as import java.sql.*; import oracle.jdbc.*; class JDBCConnections { public static String test() throws SQLException { try { Connection conn1 = DriverManager.getConnection("jdbc:default:connection:"); Connection conn2 = DriverManager.getConnection("jdbc:default:connection:"); Statement stmt1 = conn1.createStatement(); Statement stmt2 = conn2.createStatement(); try { stmt1.executeQuery("insert into test_tr values(1)"); stmt2.executeQuery("insert into test_tr values(2)"); stmt2.executeUpdate("rollback"); stmt1.executeUpdate("commit"); } finally { try { stmt1.close(); stmt2.close(); } catch (Exception E) { return E.toString()+E.getMessage(); } } return conn1==conn2?"true":"false"; } catch (Exception e) { return e.getMessage(); } } } /Обертка:
create or replace function jdbc_test return varchar2 as language java name 'JDBCConnections.test() return java.lang.String'; /Код теста:
begin dbms_output.put_line('Conn1==Conn2 = '||jdbc_test); for rec in (select decode(count(*),1,'yes','no') res from test_tr) loop dbms_output.put_line('Two transactions? - '||rec.res); end loop; end; /
Comments
И, естественно, все будет нормально, если открывать вместо второго дефолтного "внешнее" соединение, типа:
Connection conn2 = DriverManager.getConnection("jdbc:oracle:thin:@localhost:port:sid","login","pass");
Отправить комментарий