程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

PL/SQL 杂谈(七)(plsql???)

balukai 2025-07-28 15:14:10 文章精选 3 ℃

承接(六)。今天来聊聊 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 公司会一直提供对它的支持。

最近发表
标签列表