oracle中怎么写事务?

Vesuvius_1984 2008-04-11 04:42:43
有种说法:事务开始: 当第一个DML语句一个事务开始(数据操纵语言:insert、delete、select、update增、删、查、改)
事务结束: 当一个commit和rollback语句被发
当一个DDL语句执行,(数据定义语言 create、alter、drop、truncate)
当一个DCL语句执行,(数据控制语言 grant、revoke(授权、回收)、set role)
用户退出
机器失效或者崩溃
一个事务结束后,下一个可执行的SQL语句自动开始下一个事务。

还见过一种:begin transaction
if(...)
commit
else
rollback
end if

有没人能清楚完整地讲一讲sql plus中怎么写一个事务?
...全文
862 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
codearts 2008-04-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Vesuvius_1984 的回复:]
我见过一个例子:
BEGIN TRANSACTION;
......
IF (......)
ROLLBACK;
ELSE
COMMIT;
END IF;

是否提交还是撤销 是根据if后面的条件来判断的,但是不知道if后面的条件有没有什么规定的格式,能不能举个例子?
[/Quote]

BEGIN TRANSACTION; 这个在sqlserver中常用,oracle默认在执行语句时就开启一个事务的,相当于sqlserver的隐式事务:SET IMPLICIT_TRANSACTIONS ON

签于oracle会自已开启一个事务,所以只需要rollback或commit就行了。
oracle中的 SET TRANSACTION 常用来指定回滚段,以避免那个著名的回滚段过旧的错误
Vesuvius_1984 2008-04-11
  • 打赏
  • 举报
回复
if后面()里的内容是什么样的,举个例子呗
iihero 2008-04-11
  • 打赏
  • 举报
回复
同意7楼的,加上savepoint就完美了
kanxue660 2008-04-11
  • 打赏
  • 举报
回复
我一般都是异常块中回滚
HelloWorld_001 2008-04-11
  • 打赏
  • 举报
回复
if () then --then
rollback;
else
commit;
end if
Vesuvius_1984 2008-04-11
  • 打赏
  • 举报
回复
先去吃个饭,晚上还在线,继续讨论:)
Vesuvius_1984 2008-04-11
  • 打赏
  • 举报
回复
我见过一个例子:
BEGIN TRANSACTION;
......
IF (......)
ROLLBACK;
ELSE
COMMIT;
END IF;

是否提交还是撤销 是根据if后面的条件来判断的,但是不知道if后面的条件有没有什么规定的格式,能不能举个例子?
HelloWorld_001 2008-04-11
  • 打赏
  • 举报
回复
if 和commit没直接联系
if .. then
null;
elsif .. then
null;
else
null;
end if;
--最后commit,rollback?
commit;
Vesuvius_1984 2008-04-11
  • 打赏
  • 举报
回复
oracle里,begin transaction、end trsaction 是可有可无的,是吗?
那么当用到if的时候,该怎么用呢,比如
if(...)
commit
else
rollback
这个(...)应该怎么写?
在线等着
HelloWorld_001 2008-04-11
  • 打赏
  • 举报
回复
楼主想要的?savepoint
begin
insert into temp values(1);
savepoint a1;
insert into temp values(2);
savepoint a2;
insert into temp values(3);
savepoint a3;
rollback to a2;
commit;
end;

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧