您是否可以使用JDBC Java提交或回滚存储过程或函数,以及SQL对象的提交或回滚



我打算使用几个Oracle函数,如果所有函数都正确执行,则在Java中应用提交,否则对我使用的函数应用回滚。

Java:

String query = "{? = call SAVECLIEN(?)}";
try(CallableStatement cs = conn.prepareCall(query);) {
cs.execute();
if (cs.getInt(1) > 0) {
conn.commit();
} else {
conn.rollback();
}
}

Oracle SQL:

/*OBJECT SQL ORACLE */
CREATE FUNCTION SAVECLIEN(name INTEGER) 
RETURN NUMBER  IS
BEGIN 
/*LOGIC OF BUSINESS INSERT ,UPDATES........*/
INSERT INTO CLIEN VALUES (name);
/*IF  COMPLETE ALL THE BUSINESS LOGIC APPLY COMMIT OR ROLLBACK*/
COMMIT;
RETURN 1;
END;

过程中已经有一个COMMIT语句。您在程序外尝试ROLLBACK不会有任何效果,因为它将ROLLBACK转换为您尝试反转的INSERT之后的最后一个COMMIT

从过程中删除COMMIT,然后您可以调用一个匿名PL/SQL块,该块反过来调用您的函数并处理COMMIT和/或ROLLBACK逻辑:

String query = "DECLARE
value NUMBER;
BEGIN
value := SAVECLIEN(?);
IF value > 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
? := value;
END;";

注意:您的输出将在第二个绑定变量中,而不是第一个

相关内容

最新更新