Vor*_*ion 8 sql oracle transactions
我正在尝试在带有Oracle DB的SQL控制台上使用事务块。我习惯在PostgreSQL中使用转轴块
BEGIN;
<simple sql statement>
END;
Run Code Online (Sandbox Code Playgroud)
但是在oracle中看来这是不可能的。我总是收到“ ORA-00900”错误,而且我不知道该如何解决。如果我只使用像
<simple sql statement>
COMMIT;
Run Code Online (Sandbox Code Playgroud)
有用。但是是否没有一些标签来定义交易的开始?我试过了
START TRANSACTION;
<simple sql statement>
COMMIT;
Run Code Online (Sandbox Code Playgroud)
但是它仍然抛出ORA-00900。我的操作系统是Windows,我正在使用IntelliJ IDEA和Oracle 11g DB。
您可以通过发出一条SQL语句来获得隐式事务块,如下所示:
<simple sql statement>
Commit;
Run Code Online (Sandbox Code Playgroud)
对于匿名块或PL / SQL过程/函数/包,您可以在Postgres中看到更多选项。
如果您有几条必须全部成功或全部失败的语句(然后是原子事务,那么从文档开始),您可以执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
正常情况下,读取已提交事务会自动从第一个修改的行开始。
如果您想显式设置事务,请使用:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
- 但事务将在修改第一行时物理创建,而不是在执行此语句时创建。
或者
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
- 在这种情况下,读取一致性将是执行此命令时的一致性。READ ONLY
事务具有同样的读一致性效果。
归档时间: |
|
查看次数: |
17391 次 |
最近记录: |