#变量

变量是用来存储数据及在程序中传递数据值的一个容器。在PL过程体中使用的变量必须先进行声明,且某些类型的变量可在声明的同时为其赋一个初始值。

# 变量声明

一个声明用于定义一个对象,指定数据类型,分配存储空间,并命名存储位置,以便后续引用。声明必须出现在块、子程序或包的声明部分。

变量可以被显式声明和隐式声明:

  • 显示声明变量

对于过程体中使用的全局变量,必须在BEGIN关键字前显示声明。

  • 隐式声明变量

对于PL语句中的FOR Statement,其counter变量即为隐式声明的局部变量,可直接使用而不需要在BEGIN关键字前显示声明。

# 变量初始化和赋值

在声明变量时,可同时对其进行初始化赋值,例如:var INT := 0;

# 赋值语句赋值

将常数/变量、或常数/变量的四则运算组成的表达式,通过:=赋值给变量。

示例

DECLARE
    a INT;
BEGIN
    a := 1;
END;
/

# SQL赋值

将SQL(包括静态SQL和动态SQL)的结果集,通过INTO赋值给变量,具体请参考DML StatementEXECUTE 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

自定义异常变量,该变量只能被用于PL的异常处理机制中。