#变量
变量是用来存储数据及在程序中传递数据值的一个容器。在PL过程体中使用的变量必须先进行声明,且某些类型的变量可在声明的同时为其赋一个初始值。
# 变量声明
一个声明用于定义一个对象,指定数据类型,分配存储空间,并命名存储位置,以便后续引用。声明必须出现在块、子程序或包的声明部分。
变量可以被显式声明和隐式声明:
- 显示声明变量
对于过程体中使用的全局变量,必须在BEGIN关键字前显示声明。
- 隐式声明变量
对于PL语句中的FOR Statement,其counter变量即为隐式声明的局部变量,可直接使用而不需要在BEGIN关键字前显示声明。
# 变量初始化和赋值
在声明变量时,可同时对其进行初始化赋值,例如:var INT := 0;
。
# 赋值语句赋值
将常数/变量、或常数/变量的四则运算组成的表达式,通过:=
赋值给变量。
示例
DECLARE
a INT;
BEGIN
a := 1;
END;
/
# SQL赋值
将SQL(包括静态SQL和动态SQL)的结果集,通过INTO赋值给变量,具体请参考DML Statement、EXECUTE Statement描述。
# 游标赋值
通过FETCH语句对游标取值并赋给变量,具体请参考FETCH Statement。
# 出参赋值
通过将变量作为OUT或IN OUT参数传递给存储过程或自定义函数,通过给出参赋值的方式给变量赋值,具体请参考形参和实参中的OUT参数和IN OUT参数。
# 变量类型
隐式声明变量时其类型已知且由系统指定,显式声明则需在定义时明确指定变量类型,不同类型的变量声明格式不同,YashanDB PL包括的变量类型有:
- 普通变量:
普通变量的声明格式为:"变量名称 [CONSTANT] 数据类型[NOT NULL] [:=初始值];"。
其中,数据类型同SQL中定义的普通标量数据类型。
当数据类型为字符型时,须同时指定其Size属性,例如VARCHAR(10),但输入CHAR默认等同于CHAR(1)。CHAR和VARCHAR中可指定的最大Size为32000。Size后可选长度单位CHAR和BYTE,分别为字符长度单位和字节长度单位。
- 对于VARCHAR(SIZE[CHAR|BYTE]),指定不超过32000个字节的初始值。若不指定长度单位,默认使用BYTE。
- 对于CHAR(SIZE[CHAR|BYTE]),使用CHAR长度单位时初始值会优先按照字符数进行空格补齐,最大补齐至32000个字节;使用BYTE长度单位时初始值按照字节数进行空格补齐,最大补齐至32000个字节。若不指定长度单位,默认使用BYTE。
当指定NOT NULL属性时,须同时为变量指定不为NULL的初始值。 当指定CONSTANT属性时,表示所声明的变量为一个常量,常量在声明时必须赋值且之后不能再赋值,具体见常量章节介绍。
- 游标:
游标是一种特殊的PL变量,具体可分为显式与动态两种类型,其声明和使用方式见游标文档说明。
- RECORD:
一个RECORD由一组数据项组成,每个数据项有自己的名称和数据类型,例如一个表的多个列项可以组成一个RECORD,其声明和使用方式见RECORD文档说明。
- VARRAY:
集合变量,用于定义数组,可以为复合(嵌套)数组。
- NESTED TABLE:
集合变量,用于定义嵌套表。
- %TYPE:
引用变量,用于对某个变量或某个列字段类型的自动引用,使声明变量的数据类型与该变量或列字段的数据类型相同。
- %ROWTYPE:
引用变量,用于对某个表或视图结构类型的自动引用,使声明变量为一个包含该表或视图所有列项的RECORD。
- EXCEPTION: