我正在尝试在带有 Oracle DB 的 SQL 控制台上使用事务块。我习惯在 PostgreSQL 中使用事务块,例如
BEGIN;
<simple sql statement>
END;
但在 oracle 中,这似乎是不可能的。我总是收到“ORA-00900”错误,我不知道如何解决。如果我只使用 SQL 语句,例如
<simple sql statement>
COMMIT;
有用。但是不是有一些标签来定义事务的开始吗?我试过
START TRANSACTION;
<simple sql statement>
COMMIT;
但它仍然抛出一个 ORA-00900。我的操作系统是 Windows,我使用的是 IntelliJ IDEA 和 Oracle 11g DB。
最佳答案
您可以通过发出一条 SQL 语句来拥有一个隐式事务块,如
<simple sql statement>
Commit;
对于匿名块或 PL/SQL 过程/函数/包,您可能在 Postgres 中看到了更多可用选项。
如果您有几个语句必须全部成功或全部失败(atomic transaction 那么,从 the documentation ,您可以执行以下操作:
DECLARE
<variable declaration>
BEGIN
<simple sql statement>
<simple sql statement>
<simple sql statement>
SAVEPOINT do_insert;
<sql insert statement>
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK TO do_insert;
DBMS_OUTPUT.PUT_LINE('Insert has been rolled back');
END;
--and commit outside the transaction
关于sql - 如何在 oracle SQL 中使用事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35178808/