南大通用数据库Gbase8a MPP Cluster学习存储过程以及函数语法
一、例1
(1)存储过程实现内容
按照给定的条数参数,生成相应的记录数。
存储过程定义:
CREATE PROCEDURE "GenerateTestData"(num int)
begin
declare tempval int;
set tempval = 1;
set autocommit = off;
label: loop
insert into czg values(tempval);
if tempval >= num then
leave label;
else
set tempval = tempval + 1;
end if;
end loop label;
commit;
end;
(2)测试步骤
gbase> CREATE TABLE "test" ("a" int(11));
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> drop procedure if exists "GenerateTestData";
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> DELIMITER //
gbase> CREATE PROCEDURE "GenerateTestData"(num int)
-> begin
-> declare tempval int;
->
-> set tempval = 1;
-> set autocommit = off;
-> label: loop
-> insert into czg values(tempval);
-> if tempval >= num then
-> leave label;
-> else
-> set tempval = tempval + 1;
-> end if;
-> end loop label;
-> commit;
-> end;//
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> call "GenerateTestData"(10);//
Query OK, 0 rows affected (Elapsed: 00:00:00.04)
gbase> select count(*) from test;//
+----------+
| count(*) |
+----------+
| 10 |
+----------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select * from test;//
+------+
| a |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+------+
10 rows in set (Elapsed: 00:00:00.00)
二、例2-涉及的语法
(1)DELIMITER
语法格式:
DELIMITER 符号
语法解释:
起到分隔符的作用,通常是使用//,因为此符号并不是很常见,用来告诉数据库哪些Sql语句是一个整体。
(2)BEGIN…END
语法格式:
[标签名:] BEGIN
函数体
END [标签名]
语法解释:
代表函数体的开始和结束,如果在开始是定义了标签,结束时也要用标签,中间写具体的业务逻辑。
(3)DECLARE
语法格式:
DECLARE 变量名 变量类型;
语法解释:
在函数体内定义局部变量。
注意事项:
1、一个DECLARE可以定义多个变量。
2、DECLARE必须在BEGIN…END之间。
(4)SET
语法格式:
SET 变量名 = 值;
语法解释:
给定义的变量赋值。
(5)IF
语法格式:
IF 判断条件 THEN
具体逻辑
ELSEIF 判断条件 THEN
具体逻辑
ELSE
具体逻辑
END IF;
语法解释:
IF判断,根据不同的条件进入不同的逻辑分支。
(6)LOOP
语法格式:
[标签名:] LOOP
具体逻辑
END LOOP [标签名] ;
语法解释:
死循环,建议加上标签,再结合LEAVE来结束循环。
(7)LEAVE
语法格式:
LEAVE 标签名;
语法解释:
跳到某个标签,LEAVE一般用来结束循环