购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3.2 PL/SQL单元与编译参数

PL/SQL单元包括匿名块(PL/SQL anonymous block)、函数(FUNCTION)、包(PACKAGE)、包体(PACKAGE BODY)、过程(PROCEDURE)、触发器(TRIGGER)、类型(TYPE)、类型体(TYPE BODY)。PL/SQL单元受PL/SQL编译参数的影响,编译参数为数据库初始化参数。

编译参数有如下几类,如表1.1所示。

表1.1 PL/SQL编译参数列表

1.plsql.variable_conflict

在一个PL/SQL语句块中的SQL语句可以引用块中的变量和参数,当变量名、参数名与表的列名重名时,这条语句就会产生歧义。要解决变量名的冲突问题,则需要限定引用的变量,或者配置变量冲突时的策略。

示例1.4: 依赖于VARIABLE_CONFLICT设置的函数。

示例函数中含有2个参数,shopid和shopname,而shopstores表中也含有同名的2列。由于设置了编译参数VARIABLE_CONFLICT为use_variable,所以在UPDATE命令中shopname和shopid引用的是函数中的变量,而非shopstores表中的列。如果需要引用表中的列,则需要在相应名称前添加表名加以限定,如WHERE子句中的shopstores.shopid。

如果要在系统范围内更改这一行为,需修改配置参数plsql.variable_conflict,设置为error、use_variable、use_column之一。

还可以通过在过程开头插入以下的特殊命令之一单独设置行为,代码如下。

示例1.5: 不依赖于VARIABLE_CONFLICT设置的函数。

程序代码如下。

2.plsql.check_asserts

assert断言语句主要用于调试,以便检查PL/SQL程序设计是否与预期一致。assert语句的语法格式如下。

在该语句中,condition是一个布尔表达式,预期总是返回true。如果condition结果为true,则assert语句不执行任何操作;如果结果为false或null,则会引发assert_failure异常。

通过配置参数plsql.check_asserts可以启用或者禁用断言测试。该参数接受布尔值,且默认为on。如果为off,则assert语句什么也不做。

3.plsql.compile_checks

在PL/SQL中,创建一个引用了不存在对象的语句块,该语句块可以正常创建,在被引用的对象补充创建之后,语句块即可正常调用;如果调用时被引用的对象仍不存在,则会抛出异常。

如果希望在创建语句块时就对引用对象的有效性进行检查,则可以通过设置plsql.compile_checks参数为true编译检查功能的启用。

示例1.6: 关闭编译检查功能,创建引用不存在对象的语句块。

程序代码如下。

该过程可以正常创建,调用时会抛出异常,程序代码如下。

示例1.7: 开启编译检查功能,创建引用不存在对象的语句块。

程序代码如下。

此时,创建过程会提示相关引用对象不存在,程序代码如下。 AFu4Co2oE9vC4zeKQ0xzoPRXzNQQBrycmrCTjCsKPQOCtdSPlJ2H1XN9ZtbCqk7A

点击中间区域
呼出菜单
上一章
目录
下一章
×