Oracle 11 - sqlplus - 出错时回滚整个脚本 - 如何?

2024-01-19

如何使 Oracle 11g 在包含的 SQL 文件中出现任何错误时回滚整个事务?

文件内容是:

set autocommit off
whenever SQLERROR EXIT ROLLBACK

insert into a values (1);
insert into a values (2);

drop index PK_NOT_EXIST;

commit;

并且使用“@”将该文件包含到 sqlplus 会话中:

@error.sql

正如预期的那样,sqlplus 会话终止并且输出为

SQL> @error.sql
1 row created.
1 row created.
drop index PK_NOT_EXIST           *
ERROR at line 1:
ORA-01418: specified index does not exist
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

但是当我重新启动sqlplus时,表a包含2条记录,这意味着有一个commit而不是 sqlplus 退出时的回滚。

我可以以某种方式强制 sqlplus :

  1. 出错时停止处理文件,
  2. 并在错误时回滚整个事务?

DDL 在运行之前和之后都会执行提交,这样即使 DDL 失败,oracle 也已经提交了事务。

你可以用以下方法解决它:

set autocommit off
whenever SQLERROR EXIT ROLLBACK


declare
  procedure drop_idx(i varchar2)  
  is
    pragma autonomous_transaction; -- this runs in its own transaction.
  begin
    execute immediate 'drop index ' || i;
  end;
begin
  insert into a values (1);
  insert into a values (2);
  drop_idx('PK_NOT_EXIST');
end;
/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle 11 - sqlplus - 出错时回滚整个脚本 - 如何? 的相关文章

  • Delta Lake 回滚

    需要一种优雅的方式将 Delta Lake 回滚到以前的版本 我目前的方法如下 import io delta tables val deltaTable DeltaTable forPath spark testFolder spark
  • Flask-sqlalchemy和oracle数据库id不自动递增

    我想使用 Python 和 Flask 框架以及 SQLAlchemy 模块在我的数据库 Oracle 11g 但 Ubuntu 16 04 的 Express 版本 中创建一个新表 表的第一个字段是 ID 是一个整数字段 我希望它自动增量
  • 在 Oracle 中运行的 Java - 导入的 jar

    我正在尝试将一个小型 java 类加载到 Oracle 11g 中 以便我可以运行它并从 PL SQL 调用它 我在本地机器上用 eclipse 编码并编译了该类 并且编译得很好 我把它打包成一个jar 它所依赖的其他jar文件也放在jar
  • 如何使用 sqlplus 或 sql Developer 云连接连接到 Azure Oracle 12c 数据库

    我在 azure 中有 2 个虚拟机 一个是数据库服务器 另一个是 Web 服务器 我可以获得这些服务器的远程桌面连接 并且 Web 服务器可以连接到数据库 sqlplus user password internal network ip
  • 程序中出现奇怪的错误“Ora-01001无效光标”

    昨天我处理了生产过程中的一个奇怪的错误 语句执行失败 if v cursor isopen then close v cursor here was an error end if 经过一番研究后 我发现问题出在打开该游标的子程序中 我通过
  • Oracle:替换字符串中的非数字字符

    我的数据库中有一个字段 用户在其中保存了自由格式的电话号码 因此 数据具有各种不同的格式 区域 nnn nnnn 区域 nnn nnnn 区域 nnn nnnn etc 我想删除所有非数字字符并只存储数字 但我找不到简单的方法来做到这一点
  • 如何检查条件并将文本写入文本文件 oracle 表单

    我正在 Oracle Forms 中创建过程 其中检查验证数据并将数据插入表中 另请检查验证数据如果条件为真 则将一些文本写入文本文件 如果条件不为真 则将一些文本写入文本文件 Like Validation No 1 OK Validat
  • Oracle - 如何使用快速刷新和联接创建物化视图

    所以我很确定 Oracle 支持这一点 所以我不知道我做错了什么 这段代码的工作原理 CREATE MATERIALIZED VIEW MV Test NOLOGGING CACHE BUILD IMMEDIATE REFRESH FAST
  • 为什么 wm_concat 在这里不起作用?

    我有这个查询 SELECT OBJECT ID from cr object group entries vw where object group id IN SELECT ITEM FROM TABLE CR FN SPLIT STRI
  • Oracle 中的第 N 个最高薪水

    为了找出oracle中的第N个最大sal 我使用下面的查询 SELECT DISTINCE sal FROM emp a WHERE SELECT COUNT DISTINCE sal FROM emp b WHERE a sal lt b
  • SQL Server 2008事务,需要回滚吗?

    我有一个存储过程BEGIN TRANSACTION and COMMIT TRANSACTION陈述 事务中是一个选择查询WITH XLOCK ROWLOCK 如果提供超出范围的值 则由于某些计算会导致算术溢出错误 交易可能会失败 此错误会
  • 如何在表上选择并计算某些值的出现次数

    我请求你的帮助 因为我不太了解 SQL 我需要计算表列中某些值的出现次数 以达到类似统计表的效果 如下图所示 需要的结果 Comment 我的结果表需要有前两列 国家和站点 来自第一个表 Violations 接下来的 5 列将包含状态表中
  • commit失败是否需要回滚?

    这似乎是一个足够简单的问题 但我找不到任何特定于 MySQL 的明确答案 看这个 mysqli gt autocommit false Start the transaction success true do a bunch of ins
  • CLOB 与 VARCHAR2 以及还有其他替代方案吗?

    我正在为我的应用程序使用 DevArt 的 dotConnect 和 Entity Developer 我已经使用实体优先功能创建了表 我注意到许多列类型都设置为 CLOB 我只有 MySQL 和 Microsoft SQL Server
  • 如何使用循环将值添加到 VARRAY

    我有一个 VARRAY 我想通过使用循环向该 VARRAY 添加元素 这是我到目前为止所尝试过的 DECLARE TYPE code array IS VARRAY 26 OF VARCHAR2 6 codes code array BEG
  • SQLPLUS 保存到文件

    我必须为我的数据库类使用 SQLPLUS 我们的第一个作业是简单的保存 我按照说明进行操作 我正在使用 PuTTY 访问 sqlplus 在本练习中使用以下 SQL 命令 并尝试使用 SAVE 和 SPOOL 命令将 SQL 命令和输出保存
  • 在Oracle中,是否可以将以逗号分隔的非常大的字符串(clob)转换为具有更好性能的表

    我需要通过逗号分隔符将非常大的 clob 字符串转换为表 下面的函数需要很长时间 有没有返回表的快速函数 create or replace FUNCTION UDF STRSPLIT2 P STR IN CLOB P DELIM IN V
  • 调用我的过程时参数数量或类型错误

    您好 我编写了这段代码来创建一个过程 根据 if 条件返回布尔值 但是当我执行它时 我收到此错误 ORA 06550 line 1 column 7 PLS 00306 wrong number or types of arguments
  • 如何使用 Ajax 对 Oracle APEX 表格表单执行逐行验证?

    使用我执行的相同验证 处理 基于此线程 在 Oracle APEX v4 2 2 中通过 Ajax 调用 Oracle 函数进行现场验证 https stackoverflow com questions 21474303 calling
  • 如何使用 LINQ to Entities 调用带返回值的 Oracle 函数?

    我正在开发一个从 Oracle 11g 数据库访问数据的应用程序 我使用的是 EF4 并且使用 LINQ 访问数据 我遇到过一个场景 我需要调用存储在包中的函数 这个函数也有一个返回值 我已将此函数添加到实体数据模型中 但无法对其执行 添加

随机推荐

  • 如何使用 CIColorControls 通过 UISlider 和 Swift 更改亮度、对比度和饱和度

    我正在开发一个照片滤镜应用程序 正如你所看到的 我添加了一个功能来调整对比度 亮度 饱和度和噪音 但问题是它们是独立工作的 这意味着当我开始编辑对比度时调整亮度时 它会返回到原始亮度 这是当我将亮度设置为最大 图像变白 然后尝试调整其对比度
  • 使用 Jquery,将表中的一行替换为新行

    假设我有一张桌子 table tr class old row td 1 td td 2 td td class edit Edit td tr tr class old row td 1 td td 2 td td class edit
  • 在多个音乐文件上运行命令行

    我正在使用一个名为 metaflac 的 CLI 程序 http flac sourceforge net documentation tools metaflac html http flac sourceforge net docume
  • 适用于 Android 的 Google 地图我的位置自定义按钮

    如何更改谷歌地图我的位置默认按钮 我设置了位置启用并在地图上绘制标准图像来查找位置 是否可以更改默认图像 请参阅下面的自定义按钮 xml 文件
  • dart 中的逆映射

    假设我在 dart 中有以下地图 Map f 0 0 1 1 2 0 3 1 4 0 5 1 dart中有没有什么东西可以让你轻松使用地图的逆图f 例如 逆映射f 0 用数学符号表示 应该等于集合0 2 4在这种情况下 如果值是唯一的 那么
  • 如何在ios7中以编程方式将地图颜色从白天更改为晚上

    我正在开发一个适用于 iOS 7 的应用程序 并尝试将地图从白天更改为夜间模式 将夜间模式更改为白天模式 我在 iOS 7 文档中没有找到任何相关的 API 来执行此操作 这不是内置功能MKMapKit所以你所要求的如果不自己做是不可能的
  • Jupyter Notebook 不允许我在多行中输入 MySQL 查询

    如上所述 我无法在 Jupyter 中多行输入查询 这很烦人 因为编写和读取我自己的查询比较困难 有没有办法切换多行和单行输入 我已经用谷歌搜索了好几次 但文档似乎没有多大帮助 PS 找到了输入 sql 而不是 sql 的愚蠢解决方案 使用
  • 如何在 GLSL / WebGL 中将 1 个 32 位整数打包为 4 个 8 位整数?

    我正在寻求并行化一些复杂的数学 而 WebGL 看起来是实现这一目标的完美方法 问题是 您只能从纹理中读取 8 位整数 理想情况下 我希望从纹理中获取 32 位数字 我的想法是使用 4 个颜色通道来获得每像素 32 位 而不是 4 乘以 8
  • 为什么 DateDiff 返回日期而不是分钟数?

    我需要找出两个字符串之间存在多少分钟 h1 TimeValue 06 00 00 h2 TimeValue 22 00 00 res DateDiff n h1 h2 然而 res 17 08 1902 而预期结果是 960 Sub cal
  • 让 AdView 实际显示

    我的 google adview 有问题 它没有显示 我挖了一段时间 发现人们对填充有问题 所以我去掉了填充 但仍然没有运气 这是我的相关清单数据
  • 如何将div内的img向右对齐?

    我想知道如何将div内的图像对齐到右侧 可以给周边div a text align right 这将在图像左侧留下空白区域 图像将占据整行 如果您希望内容显示在图像的左侧 请使用 float right 在图像上 然而 周边div然后将需要
  • Viewbag.Title 错误:找不到编译动态表达式所需的一种或多种类型。您是否缺少参考资料?

    我有一个 ASP NET MVC 5 Web 应用程序 在每个 cshtml 视图文件中 我收到以下错误Viewbag 找不到编译动态表达式所需的一种或多种类型 您是否缺少参考资料 我引用了 Microsoft CSharp dll 和 S
  • 如何使用 PyQt5 在 qml 中设置值?

    我想从 PyQt5 将值写入 qml 该值动态变化 例如 矩形文本值是从 Pyqt5 归档的 Rectangle width 75 height 75 text values from PyQt5 如果你想从 python 修改 QML 属
  • jQuery 醉酒插件。对焦触发不起作用

    我一直在通过 jQuery 工具提示插件进行过滤 并发现有点醉意 它由 GitHub 使用 这是我大部分决定的基础 我真的很喜欢它 而且它真的很容易使用 但我有一个问题 我需要工具提示在焦点上淡入 而不是悬停 目前它可以工作 但只能在悬停时
  • primefaces selectonemenu 更改事件不适用于空值

    我有一个包含一些项目的选择菜单 还有一个空项目用于显示 请选择一个 我的目标是当我选择其中之一时查询一些数据 如果我选择 请选择一个 则做另一件事 但最终 更改事件会针对正常值被触发 但如果我选择 请选择一个 项目 则不会触发它 感谢您的帮
  • HTML 中的上标文本

    是否可以在值字段中使用上标文本
  • SVN Changelist 与 Git 等效吗?

    只是好奇 Git 是否有类似 Subversions Changelist 功能 我发现它在运行中使用非常方便 我知道我可以运行类似的东西 cat changelistfileimade xargs git update 但我很好奇是否也有
  • android 内存不足:没有更多的后台进程?需要帮忙

    我面临内存不足的问题 Low memory no more background process这是场景 我正在使用一个从字符串数组获取数据的列表 它有一个自定义背景 单击项目 列表会获取另一个字符串数组以显示为第二级或第三级 数据库中写入
  • 计算一组集合之间的相似度

    假设有4组 s1 1 2 3 4 s2 2 3 4 s3 2 3 4 5 s4 1 3 4 5 有没有一个标准的度量来表示这组4组的相似程度 感谢您对Jaccard方法的建议 然而 这似乎是成对的 如何计算整组集合的相似度 成对地 你可以计
  • Oracle 11 - sqlplus - 出错时回滚整个脚本 - 如何?

    如何使 Oracle 11g 在包含的 SQL 文件中出现任何错误时回滚整个事务 文件内容是 set autocommit off whenever SQLERROR EXIT ROLLBACK insert into a values 1