Если вкратце, то - нельзя! Все они на самом деле в одной транзакции(естественно, если не выполнять внутри них автономных).
Тестовая табличка:
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");
Отправить комментарий