关于oracle的事务中,如何判断一条语句是否成功执行
想写个事务,执行2条插入语句,都成功执行就提交事务,失败任何一条就回滚sqlserver可以用@@ERROR来判断是否成功执行,oracle如何判断?2,百度了一下ora...
想写个事务,执行2条插入语句,都成功执行就提交事务,失败任何一条就回滚
sqlserver可以用@@ERROR来判断是否成功执行,oracle如何判断?
2,百度了一下oracle事务的语法,貌似是 SET TRANSACTION 开始,里面的部分是这样写吗?
SET TRANSACTION
XXXXXXX;
XXXXXXX;
IF xxx
BEGIN
COMMIT;
END
ELSE
BEGIN
ROLLBACK;
END
GO
哪里有哪些不对,请帮忙指正 展开
sqlserver可以用@@ERROR来判断是否成功执行,oracle如何判断?
2,百度了一下oracle事务的语法,貌似是 SET TRANSACTION 开始,里面的部分是这样写吗?
SET TRANSACTION
XXXXXXX;
XXXXXXX;
IF xxx
BEGIN
COMMIT;
END
ELSE
BEGIN
ROLLBACK;
END
GO
哪里有哪些不对,请帮忙指正 展开
5个回答
推荐于2017-11-25
展开全部
一个简单的正常提交-异常回滚 的例子代码.
SQL> select * from test_main;
ID VALUE
---------- --------------------
2 TWO
3 THREE
1 ONE
SQL> BEGIN
2 -- 插入2条同样的数据,使主键重复,引发错误后回滚事务.
3 INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
4 INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
5 COMMIT;
6 EXCEPTION
7 WHEN OTHERS THEN
8 dbms_output.put_line('Error Code = ' || TO_CHAR(SQLCODE) );
9 dbms_output.put_line('Error Message = ' || SQLERRM );
10 -- 回滚事务
11 ROLLBACK;
12 END;
13 /
PL/SQL procedure successfully completed.
SQL> select * from test_main;
ID VALUE
---------- --------------------
2 TWO
3 THREE
1 ONE
SQL>
SQL> select * from test_main;
ID VALUE
---------- --------------------
2 TWO
3 THREE
1 ONE
SQL> BEGIN
2 -- 插入2条同样的数据,使主键重复,引发错误后回滚事务.
3 INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
4 INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
5 COMMIT;
6 EXCEPTION
7 WHEN OTHERS THEN
8 dbms_output.put_line('Error Code = ' || TO_CHAR(SQLCODE) );
9 dbms_output.put_line('Error Message = ' || SQLERRM );
10 -- 回滚事务
11 ROLLBACK;
12 END;
13 /
PL/SQL procedure successfully completed.
SQL> select * from test_main;
ID VALUE
---------- --------------------
2 TWO
3 THREE
1 ONE
SQL>
追问
非常感谢,另外我要把这事务放到存储过程里面
能再帮忙写个示例吗
还有JNDI调用存储过程的代码
要求用JNDI执行这个存储过程后还能知道存储过程中的事务是提交了还是回滚了
BaseDao中相关的3个对象conn、ps(PreparedStatement)、rs(ResultSet).
追答
上面那一段代码. 就是 匿名的代码块啊, 要修改成存储过程. 就是简单加一个 存储过程的定义
SQL> CREATE OR REPLACE PROCEDURE TestProc
2 AS
3 BEGIN
4 -- 插入2条同样的数据,使主键重复,引发错误后回滚事务.
5 INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
6 INSERT INTO test_main(id, value) VALUES (4, 'FOUR');
7 COMMIT;
8 EXCEPTION
9 WHEN OTHERS THEN
10 -- 回滚事务
11 ROLLBACK;
12 RAISE_APPLICATION_ERROR(-20000, '存储过程发生了异常!');
13 END;
14 /
过程已创建。
SQL> BEGIN
2 TestProc();
3 END;
4 /
BEGIN
*
ERROR 位于第 1 行:
ORA-20000: 存储过程发生了异常!
ORA-06512: 在 "TEST.TESTPROC", line 12
ORA-06512: 在 line 2
至于 JNDI调用存储过程的代码
我只会 数据库 和 C#, JNDI 是什么都不知道啊......
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-02-26
展开全部
oracle判断是否执行成功
begin
insert into ...
-- rowcount 表示影响的行数,如果为0表示没有成功插入
if sql%rowcount > 0 then
commit;
else
rollback;
end if;
end;
begin
insert into ...
-- rowcount 表示影响的行数,如果为0表示没有成功插入
if sql%rowcount > 0 then
commit;
else
rollback;
end if;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERR : ' || TO_CHAR(SQLERRM));
ROLLBACK;
END;
这个只是抓异常的,你这个问题也没有研修过,知道怎么做的时候,能把方法公布一下不?
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERR : ' || TO_CHAR(SQLERRM));
ROLLBACK;
END;
这个只是抓异常的,你这个问题也没有研修过,知道怎么做的时候,能把方法公布一下不?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
begin
insert into xxxxxxx;
insert into xxxxxxx;
commit;
end;
insert into xxxxxxx;
insert into xxxxxxx;
commit;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
begin
insert into xxxxxxx;
insert into xxxxxxx;
commit;
exception when others then
rollback;
end;
insert into xxxxxxx;
insert into xxxxxxx;
commit;
exception when others then
rollback;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询