PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL则是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。
PL/SQL架构
PL/SQL 的编码和运行时系统是一项技术,而不是一个独立的产品。可以把这项技术想象成一个能够编译并运行PL/SQL 块和子程序的引擎。这个引擎可以安装在Oracle 服务器上或安装在Oracle Forms,Oracle Reports 这样的开发工具中。所以,PL/SQL 可以在两种环境中存在:
1. Oracle 数据库服务器
2. Oracle 开发工具
这两种环境是独立的。PL/SQL 虽被绑定到Oracle 服务器上,但在某些工具中是无法使用的。在这两种环境下,PL/SQL 引擎都能接受有效的PL/SQL 块或子程序。下图是PL/SQL 引擎处理匿名块的过程,引擎会处理过程化语句,而把SQL 语句发送给Oracle 服务器端的SQL 语句执行程序(SQL Statement Executor)来处理。
PL / SQL程序的构建块
PL/SQL块由关键字DECLARE,BEGIN,EXCEPTION和END定义,它们将块分为三个部分:
- 声明性:声明变量,常量和其他代码元素的语句,然后可以在该块中使用
- 可执行文件:执行块时运行的语句
- 异常处理:一个特殊结构化的部分,可用于“捕获”或捕获可执行部分运行时引发的任何异常
捕获异常
捕获可能引发的任何异常,并显示错误消息,该错误消息由SQLERRM函数(由Oracle提供)返回。
EXCEPTION WHEN OTHERS
DBMS_OUTPUT.put_line(SQLERRM);
每个异常都有一个错误代码和与之关联的错误消息。Oracle Database提供了在处理异常时检索这些值的函数。
描述 | 如何获得它 |
错误代码。当您需要查找可能导致此类问题的一般信息时,此代码非常有用。 | SQLCODE 注意:您不能在SQL语句中调用此函数。 |
错误消息。此文本通常包含特定于应用程序的数据,例如约束的名称或与问题关联的列。 | SQLERRM或DBMS_UTILITY.FORMAT_ERROR_STACK 注意:您不能在SQL语句中调用SQLERRM。 |
发生错误的行。此功能已在Oracle数据库10g第2版中添加,对于跟踪错误原因非常有帮助。 | DBMS_UTILITY.FORMAT_ERROR_BACKTRACE |
执行调用堆栈。这回答了“我如何到达这里?”的问题,并向您展示了通过代码到达DBMS_UTILITY.FORMAT_CALL_STACK被调用点的路径。 | DBMS_UTILITY.FORMAT_CALL_STACK |
当块的可执行部分中引发异常时,该部分中的所有其余语句都不会执行。相反,控制权转移到异常部分。
这种设计的优点在于所有与异常相关的活动都集中在PL / SQL块的一个区域,使开发人员可以轻松理解和维护所有错误管理逻辑。