GBASE南大通用GBase 8s数据库SPL入门
概述
-
SPL例程由开始语句,语句块,结束语句组成。
-
SPL例程根据是否需要返回值,分为存储过程和函数。
-
语句块由SQL和SPL语句组成。
GBASE南大通用技术分享:GBase 8s 存储过程
语法
create procedure proc_name(param1 data_type1, param2 data_type2, ...)
spl_code;
end procedure;
GBASE南大通用技术分享:GBase 8s 函数
语法
create function func_name(param1 data_type1, param2 data_type2, ...)
returning data_type1 [as id1], data_type2 [as id2], ...
spl_code;
return val1, val2, ... [with resume];
end function;
语法
变量声明
语法
define var data_type;
define global var data_type default def_value;
示例
create procedure up_test_define1()
define m, n int;
define global i int default 1;
define global loginname varchar(20) default 'admin';
end procedure;
create procedure up_test_define2()
define global i int default 0;
define global loginname varchar(20) default '';
insert into t_user values(i, loginname);
let i = i + 1;
let loginname = concat('user_', to_char(i));
end procedure;
变量赋值
语法
let var = value;
let var1, var2,... = val1, val2, ...;
let var1, var2, ... = function(args1, args2, ...);
let var1, var2, ... = (select col1, col2, ... from table_name);
示例:1
create procedure up_test_let1()
define userid int;
define username varchar(20);
let userid, username = 99, 'gbasedbt';
insert into t_user values(userid, username);
end procedure;
示例2:
create function fn_get_user_info(userid int)
returning int as userid, varchar(20) as username
return userid, concat('user_func_', to_char(userid));
end function;
create procedure up_test_let2()
define userid int;
define username varchar(20);
let userid, username = fn_get_user_info(888);
insert into t_user values(userid, username);
end procedure;
示例3:
create procedure up_test_let3()
define userid int;
define username varchar(20);
let userid, username = (select first 1 f_userid * 10 as f_userid, concat(f_username, '_select') from t_user);
insert into t_user values(userid, username);
end procedure;
条件
语法
case expr
when val_1 then
code_1
[when val_2 then
code_2 ...]
else
code_n
end case;
示例1:
create function fn_test_case(month int)
returning varchar(20) as f_quarter
define quarter varchar(20);
case month
when 1 then
let quarter = '第一季度';
when 2 then
let quarter = '第一季度';
when 3 then