条件语句
if语句:
if 条件 then 执行语句;
else 执行语句; end if;
如下面的存储过程: createprocedure Test(
OUT v_message varchar(100)
)
LANGUAGE SQL BEGIN declare v_count int; set v_count = 1;
if v_count = 0 then set v_message = '0';
else set v_message = '1'; end if; END@
执行后输出参数v_message的值为1
多个if-else的语句结构
if 条件 then 执行语句;
elseif 条件 then 执行语句;
elseif 条件 then 执行语句; end if;
case语句
case
when 条件 then 执行语句;
when 条件 then 执行语句;
else 执行语句; end case;
如下存储过程: createprocedure Test(
OUT v_message varchar(100)
)
LANGUAGE SQL BEGIN declare v_count int; set v_count = 1;
case
when v_count = 0 then set v_message = '0';
when v_count = 1 then set v_message = '1';
when v_count = 2 then set v_message = '2';
else set v_message = '-1'; end case; END@ 循环语句 LOOP 循环 -- 简单的循环 L1: LOOP SQL statements; LEAVE L1; --跳出循环 END LOOP L1; WHILE 循环 -- 进入前检查条件 WHILE condition DO SQL statements END WHILE; REPEAT 循环 -- 退出前检查条件 REPEAT SQL statements; UNTIL condition END REPEAT; FOR 循环 -- 结果集上的隐式循环 FOR loop_name AS SELECT … FROM
DO
SQL statements;
END FOR;
请注意,FOR 语句不同于其他的迭代语句,因为它用于迭代一个定义好的结果集中的行。
loop循环例子 createprocedure Test(
OUT sum int
)
LANGUAGE SQL BEGIN declare v_count int; set v_count = 0; set sum = 0;
L1: LOOP
set v_count = v_count + 1; set sum = sum + v_count;
if v_count >= 10 then
LEAVE L1; --跳出循环 end if; END LOOP L1; END@
while循环例子 createprocedure Test(
OUT sum int
)
LANGUAGE SQL BEGIN declare v_count int; set sum = 0; set v_count = 0;
WHILE v_count < 10
DO set v_count = v_count + 1; set sum = sum + v_count; END WHILE; END@
REPEAT 循环例子 createprocedure Test(
OUT sum int
)
LANGUAGE SQL BEGIN declare v_count int; set sum = 0; set v_count = 0;
REPEAT set v_count = v_count + 1; set sum = sum + v_count;
UNTIL v_count >= 10 END REPEAT;
DECLARE GLOBAL TEMPORARY TABLE Result (
User_Name VARCHAR(12),
city VARCHAR(200) )ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;
--双重 for循环实现字符串分组连接 --双重游标实现分组字符串连接
FOR V1 AS CURSOR1 CURSOR FOR select distinct user_name as v_name from Recursive_Test
DO
set v_city = '';
FOR V2 AS CURSOR2 CURSOR FOR select city||' ' as v_str
from Recursive_Test where user_name = v_name
DO
set v_city = v_city||v_str;
END FOR;
insert into session.Result values( v_name,v_city);
END FOR;
BEGIN
DECLARE v_ret CURSOR WITH HOLD WITH RETURN TO CALLER FOR
select * from SESSION.result;
OPEN v_ret;
END;