VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

定义变量

介绍PL/pgSQL中变量的声明,以及该变量在代码中的作用域。

语法格式

变量声明语法请参见下图。

declare_variable::=

参数说明

  • variable_name

    变量名。

  • type

    变量类型。变量类型除了支持基本类型,还可以使用%TYPE%ROWTYPE去声明一些与其他表字段或表结构本身相关的变量。

    • %TYPE属性

      %TYPE主要用于声明某个与其他变量类型(例如,表中某列的类型)相同的变量。假如我们想定义一个my_name变量,它的变量类型与employee的firstname类型相同,我们可以通过如下定义:

      my_name employee.firstname%TYPE
      

      这样定义可以带来两个好处,首先,我们不用预先知道employee 表的firstname类型具体是什么。其次,即使之后firstname类型有了变化,我们也不需要再次修改my_name的类型。

    • %ROWTYPE属性

      %ROWTYPE属性主要用于对一组数据的类型声明,用于存储表中的一行数据或从游标匹配的结果。假如,我们需要一组数据,该组数据的字段名称与字段类型都与employee表相同。我们可以通过如下定义:

      my_employee employee%ROWTYPE
      
  • value

    该变量的初始值(如果不给定初始值,则初始为NULL)。value也可以是表达式。

变量作用域

变量的作用域表示变量在代码块中的可访问性和可用性。只有在它的作用域内,变量才有效。

  • 变量必须在declare部分声明,即必须建立BEGIN-END块。块结构也强制变量必须先声明后使用,即变量在过程内有不同作用域、不同的生存期。

  • 同一变量可以在不同的作用域内定义多次,内层的定义会覆盖外层的定义。

  • 在外部块定义的变量,可以在嵌套块中使用。但外部块不能访问嵌套块中的变量。

示例

DECLARE 
  emp_id  INTEGER := 7788;  --定义变量并赋值 
BEGIN 
  emp_id := 5*7784;  --变量赋值 
END; 
/