在GBASE数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果的数据,变量分系统变量和用户变量。
1、系统变量
系统变量又分全局变量(GLOBAL VARIABLES)和会话变量(SESSION VARIABLES),全局系统变量会影响到所有连接到gbase数据库的用户,但不能跨重启(重启后修改值全面恢复为配置文件中的默认值)。而session级仅影响当前的连接用户。
a、查看系统变量
可以使用以下命令查看 GBASE中所有的全局变量信息。
SHOW GLOBAL VARIABLES;
可以使用以下命令查看与当前会话相关的所有会话变量以及全局变量。
SHOW SESSION VARIABLES;
其中,SESSION 关键字可以省略。
也可以使用like子句
SHOW SESSION LIKE‘out’
也可以查看指定的变量
SELECT @GCLUSTER_LOG_LEVEL
b、设置系统变量
设置一个全局系统变量:SET GLOBAL GCLUSTER_LOG_LEVEL = 7
GLOBAL是全局系统变量的关键字。
设置一个会话系统变量:SET GCLUSTER_LOG_LEVEL = 7
省略GLOBAL 关键字即可
2、用户变量
用户变量是用户自定义。以一个'@'开头(主要修饰会话用户变量)。会话用户变量:作用域和会话变量一样,只对当前来连接会话有效。局部变量:只在BEGIN和END中有效,只在存储过程和函数中使用。
a、回话变量,变量的定义与赋值
方式一: SET @变量名 = 值;
方式二: SELECT 表达式 INTO @变量名 [FROM 等句];
使用案例:
gbase>set @test=1;
Query OK, 1 row affected (0.00 sec)
gbase> select @test;
| +——-+
| test |
+——-+
| 1 |
+——-+
1 rows in set (0.00 sec)
gbase> select count(*) into @test from t1;
Query OK, 1 row affected (0.00 sec)
b、局部变量,使用 DECLARE 去定义一个局部变量。仅在它的 BEGIN...END 中有效。
定义
DECLARE 变量名 类型 [default 值]#如果没有默认值,则初始值null
赋值
SET 变量名 = 值;
SELECT 表达式 INTO 变量名 [FROM 等句];
使用
SELECT 局部变量名;
使用案例:在存储过程中使用
delimiter $
create procedure test_var()
begin
declare a int default 0;
declare b int default 0;
declare emp_name varchar(15); #定义变量
set a = 1;
Set b = 2; #为变量赋值
select name into emp_name from t1 where id = 3; #为变量赋值
select a,b,emp_name; #使用变量
end $
delimiter ;
表t1 中数据
id | name | |
1 | 张三 | 南马路2号 |
3 | 李四 | 红旗路3号 |
存储过程执行结果
call test_var();
a | b | emp_name |
1 | 2 | 李四 |




