网站首页 > 技术文章 正文
承接(六)。今天来聊聊 SQL*Plus 中的异常处理。
SQL*Plus 表达运行成功的方式与命令的种类相关。对于大多数 SQL*Plus独有的命令,如果没有返回错误信息,那么就表示运行成功。另一方面,SQL和PL/SQL命令,通常会返回某种正面的文字来表示运行成功。
如果 SQL 或 PL/SQL 语句在 SQL*Plus 中执行时遇到错误,默认 SQL*Plus 会引发错误信息,同时继续执行后续的语句。
如果我们工作在交互环境中,这种异常处理方式是不错的,但如果我们是在运行一个脚本,大多数情况下,我们希望当出现错误时,SQL*Plus 会话被终止。
我们可以通过下面的命令进行设置:
SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE
这样一来,在当前会话中,如果数据库服务器返回了一个 SQL 或 PL/SQL 运行错误,那么就会终止。它把返回代码设置成一个非0值,我们就可以在调用环境中捕捉到这个值。否则,SQL*Plus 总是会以返回值0结束,让我们误以为脚本执行成功了。
这个命令的另一个形式是:
SQL> WHENEVER SQLERROR EXIT SQL.SQLCODE ROLLBACK
这个指令除了上个命令的含义,还指示 SQL*Plus 在退出前,回滚尚未提交的变更。
-------------------------------------------------
下面谈谈 SQL*Plus 的优缺点。
SQL*Plus 除了上面我们介绍的特性,还有一些值得我们去了解并喜欢上的特点。
(1)在 SQL*Plus 里,我们可以运行“批量”程序,在 sqlplus 命令行中给应用程序提供参数,
然后在脚本中使用“&1”(第一个参数)、“&2”(第二个参数)来引用这些参数。
(2)SQL*Plus为所有的 SQL 和 PL/SQL 版本提供完全的和随时更新的支持。当我们用到 Oracle 专有的功能时,这点就显得很重要。
第三方环境是无法提供100%支持的,例如,Oracle的对象类型在几年前就出现了,但第三方的支持就出现得非常缓慢。
(3)SQL*Plus可以和 Oracle 服务器运行在相同的硬件和操作系统平台上。
---------
当然,和其他工具一样,SQL*Plus也有下面这些不足之处:
(1)在控制台版本的 SQL*Plus,语句缓存区仅能保留最后执行的一条语句,无法容纳更多的历史命令
(2)SQL*Plus 缺乏一些现代的命令解释器的一些功能,如对关键字自动补充完整,或在语句键入的过程中提示有哪些数据库对象可用等。
(3)在线帮助只提供了部分 SQL*Plus命令的帮助文档。(使用 HELP command,可以得到特定命令的帮助信息。)
(4)一旦启动了 SQL*Plus,我们就无法改变当前目录,当我们打开或关闭脚本,而又不想键入完整路径名时,真有点让人恼火。如果我们发现我们所在目录不对,就只能退出SQL*Plus更改目录,再重新启动 SQL*Plus。
(5)除非我们使用危险的 SQLPATH 特性,否则 SQL*Plus 只会在启动目录中搜索 login.sql,如果它能去我们的 home 目录里寻找启动脚本就好了。
总而言之,SQL*Plus 只是一个“真正的程序员”使用的工具,既不温暖也不模糊。但它无处不在,稳定不易崩溃,而且 Oracle 公司会一直提供对它的支持。
猜你喜欢
- 2025-08-06 实战神操作:SpringBoot+Liquibase 多租户数据库版本化从 0 到 1
- 2024-11-02 拨云见日:揭开ORA-00600-「4193」的神秘面纱
- 2024-11-02 「故障处理」生产环境开启闪回报错ORA-38706
- 2024-11-02 面试时遇到“多线程事务怎么回滚?”该如何作答?
- 2024-11-02 记一次生产数据库Oracle快照过旧解决的思路及方法
你 发表评论:
欢迎- 654℃几个Oracle空值处理函数 oracle处理null值的函数
- 645℃Oracle分析函数之Lag和Lead()使用
- 643℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 635℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 631℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 618℃【数据统计分析】详解Oracle分组函数之CUBE
- 616℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 592℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)