变量的概念在PL/SQL中和其他语言里的概念一致。
变量声明的语法结构为:
variable_name datatype [:= initialized_value];
变量名和变量的数据类型是必须的,在声明时就初始化则是可选的,对变量的初始化赋值,也可以留到块的执行区域离进行。
#规则
PL/SQL的变量名有以下特点:
- 最大的长度为30个字符
- 首字符必须是字母,非首字符除了是字母以外,也可以是阿拉伯数字“0-9”,“$”,“_”,“#"。
- 不区分大小写
- 通过使用双引号“”包围变量名,可以绕过上述2和3的限制,可以使用除了双引号本身外的任何可打印字符,区分大小写,字符串的原始结构将会被保留
变量命名的上述特点对数据库的其他标识符(表名,视图名,过程名,函数名等)也同样使用。
#命名约定
每个组织单位都可能有自己的命名约定,在定义PL/SQL变量时,需要尽可能符合所在组织单位对命名规则的要求,以保证项目中标识符命名的一致性,提供代码的可读性,维护性和质量。
一些命名可选的方案:
前缀 | 意义 |
---|---|
l_ | 声明在块结构中的局部变量 |
g_ | 声明在包中的全局变量 |
v_ | VARCHAR2数据类型 |
n_ | NUMBER数据类型 |
t_ | TABLE数据类型 |
r_ | RECORD数据类型 |
d_ | DATA数据类型 |
b_ | BOOLEAN数据类型 |
#变量与SQL
变量可直接与SQL结合使用,用于把SQL查询的结果赋值给变量以及在SQL中读取变量的值。
DECLARE
l_name employees.last_name%TYPE;
BEGIN
SELECT last_name
INTO l_name
FROM employees
WHERE employee_id = 138;
DBMS_OUTPUT.put_line (l_name);
END;
将SQL查询的结果赋值给变量。
DECLARE
l_dept_id
employees.department_id%TYPE := 10;
BEGIN
DELETE FROM employees
WHERE department_id = l_dept_id;
DBMS_OUTPUT.put_line (SQL%ROWCOUNT);
END;
在SQL的WHERE子句中使用变量,读取变量的值构造条件。
#变量锚
变量锚(achor)是一种引用到数据库对象(表,视图…)的某个列的变量声明方式。其把相关列声明的数据类型自动映射到PL/SQL中的变量类型声明中,保持了PL/SQL和数据库中类型的同步。
语法为在数据库对象的列后面加上%TYPE
:
variable DB_OBJECT.COLUMN%TYPE;
#常量
与变量的概念相对,有常量的概念,通过使用关键字CONSTANT
声明常量
my_constant CONSTANT VARCHAR2(100) := 'HELLO';
常量在声明时必须初始化。
#NULL值
NULL值在PL/SQL中有以下特此:
- NULL与任何值都不相等,包括NULL本身
- NULL不大于也不小于任何值,包括NULL本身
- NULL值不能和逻辑操作符(=, <>)一起使用,要测试是否为NULL,需要用SQL IS NULL或者IS NOT NULL