首页 > 其他分享 >OpenGauss中循环语句

OpenGauss中循环语句

时间:2024-08-28 16:53:39浏览次数:10  
标签:语句 NOTICE END sp while 循环 OpenGauss LOOP

在 OpenGauss(以及很多其他的 SQL 数据库系统中),循环语句不是 SQL 的一部分,因为 SQL 主要被设计为处理数据的查询、更新、插入和删除等操作,而不包括传统编程语言中的控制流语句(如循环和条件语句)。然而,OpenGauss 提供了 PL/pgSQL(PostgreSQL 的过程语言的一个变种,也被 OpenGauss 所支持)来允许开发者编写复杂的存储过程和函数,其中可以包含循环语句。

在 OpenGauss中,可以使用 LOOP、WHILE、FOR 循环等来控制程序流程。以下是这几种循环的示例:

参考官方文档地址
https://www.bookstack.cn/read/opengauss-5.0.0-zh/144ce1caea29b7a3.md

1、简单LOOP语句

在这里插入图片描述

CREATE OR REPLACE PROCEDURE sp_test_loop(i in integer, count out integer) 
AS 
    BEGIN 
        count:=0; 
        LOOP 
        IF count > i THEN 
            raise info 'count is %. ', count;  
            EXIT; 
        ELSE 
            count:=count+1; 
        END IF; 
        END LOOP; 
    END;
/
CALL sp_test_loop(15,10);

注意: 该循环必须要结合EXIT使用,否则将陷入死循环。

2、WHILE_LOOP语句

只要满足条件表达式为真,WHILE语句就会不停的执行语句进行循环,在每次进入循环体的时候进行条件判断。
在这里插入图片描述

CREATE TABLE t_tab_while(id integer) ; 

CREATE OR REPLACE PROCEDURE sp_while_loop(maxval in integer) 
AS 
    DECLARE 
    i int :=1;  
    BEGIN 
        WHILE i < maxval LOOP 
            INSERT INTO t_tab_while VALUES(i); 
            i:=i+1; 
        END LOOP; 
    END; 
/
--调用函数
CALL sp_while_loop(5);

superdb=> CALL sp_while_loop(5);
 sp_while_loop
---------------

(1 row)

superdb=> select * from t_tab_while;
 id
----
  1
  2
  3
  4
(4 rows)

--删除存储过程和表
DROP PROCEDURE sp_while_loop;
DROP TABLE t_tab_while;

3、FOR_LOOP

3.1、FOR_LOOP(integer变量)语句

在这里插入图片描述
说明:

  • 变量name会自动定义为integer类型并且只在此循环里存在。变量name介于lower_bound和upper_bound之间。
  • 当使用REVERSE关键字时,lower_bound必须大于等于upper_bound,否则循环体不会被执行。
declare i INT;
BEGIN
    FOR i IN REVERSE 10..1 by 2 LOOP
        RAISE NOTICE 'i 的值是 %', i;
    END LOOP;
END ;
superdb$> /
NOTICE:  i 的值是 10
NOTICE:  i 的值是 8
NOTICE:  i 的值是 6
NOTICE:  i 的值是 4
NOTICE:  i 的值是 2
ANONYMOUS BLOCK EXECUTE

3.2、FOR_LOOP查询语句

在这里插入图片描述

变量target会自动定义,类型和query的查询结果的类型一致,并且只在此循环中有效。target的取值就是query的查询结果

DECLARE i INT;  
BEGIN  
    FOR i IN 1..5 LOOP  
        RAISE NOTICE 'i 的值是 %', i;  
    END LOOP;  
END ;
superdb$> /

NOTICE:  i 的值是 1
NOTICE:  i 的值是 2
NOTICE:  i 的值是 3
NOTICE:  i 的值是 4
NOTICE:  i 的值是 5
ANONYMOUS BLOCK execute

4、FORALL批量查询语句

在这里插入图片描述
说明:

  • 变量index会自动定义为integer类型并且只在此循环里存在。index的取值介于low_bound和upper_bound之间。
  • 如果声明了SAVE EXCEPTIONS,则会将循环体DML执行过程中每次遇到的异常保存在SQL&BULK_EXCEPTIONS中,并在执行结束后统一抛出一个异常,循环过程中没有异常的执行的结果在当前子事务内不会回滚。
CREATE TABLE t_tab_forall(id integer) ; 

CREATE OR REPLACE PROCEDURE sp_forall()
AS 
BEGIN 
    FORALL i IN 1..5 
        INSERT INTO t_tab_forall VALUES(i);
END; 
/
--调用函数
CALL sp_forall();

superdb=> CALL sp_forall();
 sp_forall
-----------

(1 row)

superdb=> select * from t_tab_forall;
 id
----
  1
  2
  3
  4
  5
(5 rows)

--删除存储过程和表
DROP PROCEDURE sp_foralll;

标签:语句,NOTICE,END,sp,while,循环,OpenGauss,LOOP
From: https://blog.csdn.net/zxrhhm/article/details/141639307

相关文章

  • openGauss-Anomaly_detection_数据库指标采集_预测与异常监控
    Anomaly-detection:数据库指标采集、预测与异常监控可获得性本特性自openGauss1.1.0版本开始引入。特性简介anomaly_detection是openGauss集成的、可以用于数据库指标采集、预测以及异常监控与诊断的AI工具,是dbmind套间中的一个组件。支持采集的信息包括IO_Read、IO_Write、CPU......
  • openGauss-CBO优化器
    openGauss-CBO优化器可获得性本特性自openGauss1.0.0版本开始引入。特性简介openGauss优化器是基于代价的优化(Cost-BasedOptimization,简称CBO)。客户价值openGaussCBO优化器能够在众多计划中依据代价选出最高效的执行计划,最大限度的满足客户业务要求。特性描述在CBO优......
  • openGauss-CM
    openGauss-CM可获得性本特性自openGauss3.0.0版本开始引入。特性简介CM(ClusterManager)是一款数据库管理软件,由cm_server和cm_agent组成。cm_agent是部署在数据库每个主机上,用来启停和监控各个数据库实例进程的数据库管理组件。cm_server是用来进行数据库实例管理和实例......
  • C# while循环与do循环
    学习循环语句之前,先学习跳转语句continue语句:跳出当前循环,开始一次新的循环,并没有结束循环break语句:立刻结束循环while循环语句while循环语句可以一次都不执行循环体举例:制作一个小游戏,输入两个和为100的数,积一分,否则游戏结束usingSystem;usingSystem.Collections.......
  • openGauss-AI能力-0
    openGauss-AI能力X-Tuner:参数调优与诊断SQLdiag:慢SQL发现Anomaly-detection:数据库指标采集、预测与异常监控Index-advisor:索引推荐DeepSQL:库内AI算法详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss-AI能力
    openGauss-AI能力人工智能技术最早可以追溯到上世纪50年代,甚至比数据库系统的发展历史还要悠久。但是,由于各种各样客观因素的制约,在很长的一段时间内,人工智能技术并没有得到大规模的应用,甚至还经历了几次明显的低谷期。到了近些年,随着信息技术的进一步发展,从前限制人工智能发展......
  • openGauss-慢SQL根因分析
    openGauss-慢SQL根因分析可获得性本特性自openGauss3.0.0开始引入。特性简介慢SQL一直是数据运维中的痛点问题,如何有效诊断慢SQL根因是当前一大难题,工具结合openGauss自身特点融合了现网DBA慢SQL诊断经验,该工具可以支持慢SQL根因15+,能同时按照可能性大小输出多个根因并提供......
  • openGauss-慢SQL诊断
    openGauss-慢SQL诊断可获得性本特性自openGauss1.1.0版本开始引入。重构前慢SQL相关视图已废弃,包括dbe_perf.gs_slow_query_info、dbe_perf.gs_slow_query_history、dbe_perf.global_slow_query_hisotry、dbe_perf.global_slow_query_info。本特性自openGauss3.1.0版本......
  • openGauss-逻辑备份
    openGauss-逻辑备份可获得性本特性自openGauss1.0.0版本开始引入。特性简介支持将数据库内用户表的数据以通用格式备份到指定的存储介质中。客户价值通过逻辑备份特性,可以达成以下目的:将用户数据备份到可靠性更高的存储介质中,提升用户表数据的可靠性。通过采用通用的数......
  • openGauss-逻辑复制
    openGauss-逻辑复制可获得性本特性自openGauss1.0.0版本开始引入。特性简介openGauss提供逻辑解码功能,将物理日志反解析为逻辑日志。通过DRS等逻辑复制工具将逻辑日志转化为SQL语句,到对端数据库回放,达到异构数据库同步数据的功能。目前支持openGauss数据库与MySQL数据库、Or......