相关疑难解决方法(0)

Oracle是否因错误而回滚事务?

这感觉就像一个愚蠢的问题,但我在Oracle事务管理概念指南中看到以下内容:

当发生以下任何情况时,交易结束:

用户发出不带SAVEPOINT子句的COMMIT或ROLLBACK语句.

用户运行DDL语句,例如CREATE,DROP,RENAME或ALTER.如果当前事务包含任何DML语句,Oracle首先提交事务,然后运行并将DDL语句作为新的单语句事务提交.

用户断开与Oracle的连接.当前事务已提交.

用户进程异常终止.当前事务将回滚.

我是否要解释最后一点意味着如果我发出一个有错误的查询,那么事务将被回滚?

sql oracle plsql transactions oracle10g

8
推荐指数
2
解决办法
2万
查看次数

关于pl/sql异常的问题

以下文本是oracle文档的摘录Oracle®DatabasePL/SQL语言参考11g第1版(11.1):

未处理的异常也会影响子程序.如果成功退出子程序,PL/SQL会将值分配给OUT参数.但是,如果退出时出现未处理的异常,则PL/SQL不会为OUT参数赋值(除非它们是NOCOPY参数).此外,如果存储的子程序因未处理的异常而失败,则PL/SQL不会回滚子程序完成的数据库工作.

注意粗体文字,这是真的吗?我很好奇,所以我写了下面的例子来测试它.

-- create a test table
CREATE TABLE e AS SELECT * FROM HR.EMPLOYEES;   

-- create p1 which will update a row in table e
CREATE OR REPLACE PROCEDURE p1
IS
    ex EXCEPTION;
    row e%ROWTYPE;
BEGIN
    select * into row from e where employee_id=100;

    row.employee_id := 100;
    row.first_name := 'yang';

    -- update
    UPDATE e set ROW = row where employee_id = 100;
    -- and raise an error
    RAISE ex;
END;


BEGIN
    -- call the upper …
Run Code Online (Sandbox Code Playgroud)

oracle plsql transactions exception

2
推荐指数
1
解决办法
2181
查看次数

标签 统计

oracle ×2

plsql ×2

transactions ×2

exception ×1

oracle10g ×1

sql ×1