KingbaseES数据库匿名块的基本用法


数据库版本:KingbaseES V008R006C008B0014


简介

    匿名块是一种特殊的代码块,用于在数据库中执行一系列的SQL语句或PLSQL语句。它们通常用于执行一些简单的逻辑或者在数据库中执行一些事务性操作(在匿名块中定义的一系列语句可以被视为1个事务),执行的操作要么全部成功,要么全部失败,从而保证数据的一致性。

        

文章目录如下

1. 基本语法

1.1. 语法说明

1.2. 常用符号

2. 控制语句

2.1. 判断语句

2.2. 循环控制

3. 应用案例

3.1. 批量插入数据

3.2. 插入关联表数据


        

1. 基本语法

1.1. 语法说明

DO $$    --[必选]创建匿名代码块的语法
DECLARE  --[可选]用于声明变量或游标
    /*声明变量或游标*/
BEGIN    --[必选]定义代码块的开始
    /*执行语句*/
END;     --[必选]定义代码块的结束
$$;      --[必选]DO后面声明了该符号为结束符,所以在最后使用表示匿名块结束

        

举个例子

DO $$
DECLARE
	id INTEGER := 10;
BEGIN
    RAISE NOTICE '这是一个匿名块, id = %', id;
END
$$;

        

1.2. 常用符号

运算符(加,减,乘,除)
+  -  *  /

逻辑运算符(大于,小于,等于,不等于,大于等于,小于等于)
>  <  =  !=  >=  <=

赋值符
:=    # a := 10

属性标识符
%

连接符
||    # a := aaa || bbb || ccc

注释符
-- [注释内容]      #单行注释
/* [注释内容] */   #多行注释,/* 表示开始,*/ 表示结束

        

2. 控制语句

2.1. 判断语句

匿名块也支持 if 判断,它的格式和函数/存储过程一样,都是写在 BEGIN..END 中。语法如下:

IF <条件1> THEN     -- 第1次判断
    <执行命令1>
ELSIF <条件2> THEN  -- 第2次判断
    <执行命令2>
ELSE                -- 前面判断都为T,执行这里
    <执行命令n>
END IF;             -- 结束符

        

举个例子:

DO $$
DECLARE
    total_amount INT := 1000;
BEGIN
    -- 判断订单总金额是否超过阈值
    IF total_amount > 500 THEN
        -- 如果订单总金额大于500,打印订单金额较大的消息
        RAISE NOTICE '订单金额较大:%,请注意处理。', total_amount;
    ELSE
        -- 如果订单总金额不大于500,打印订单金额较小的消息
        RAISE NOTICE '订单金额较小:%,可以正常处理。', total_amount;
    END IF;
END;
$$;

        

2.2. 循环控制

"循环语句" 与 "判断语句" 差不多,也是写在 BEGIN..END 中。语法如下:

【语法一】遍历序列

FOR i IN 1..100 LOOP  -- 循环1~100
    <命令块>
END LOOP;

这个序列不仅仅可以是 n~n,也可以是 SELECT 查询到的一系列数据

        

【语法二】while 判断循环

WHILE <条件> LOOP  -- 条件为Ture:执行
    <命令块>
END LOOP;         -- 结束符

        

【语法三】loop 无限循环

LOOP        -- 无限循环开始
    <命令块>
END LOOP;   -- 无限循环结束符

        

跳出循环关键字

  • EXIT:跳出整个循环
  • CONTINUE:跳出当前循环

        

3. 应用案例

3.1. 批量插入数据

DO $$
BEGIN
    FOR i IN 1..10000 LOOP
        -- 向t1表中插入1w行数据
        INSERT INTO t1 VALUES(i, 'abc');
    END LOOP;
END;
$$ ;

        

3.2. 插入关联表数据

DO $$
BEGIN
    /*循环遍历查询t2表的结果*/
    FOR i IN (SELECT id FROM t2) LOOP
        /*根据结果大小插入不同的数据*/
        IF i < 100 THEN
            <插入数据xxx1>
        ELSIF i < 500 THEN
            <插入数据xxx2>
        ELSE
            <插入数据xxx3>
        END IF;
    END LOOP;
END;
$$ ;

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值