首页 > 数据库 >GaussDB SQL基础语法示例-GOTO语句

GaussDB SQL基础语法示例-GOTO语句

时间:2024-11-27 11:14:46浏览次数:3  
标签:语句 BEGIN END GOTO 示例 GaussDB SQL 跳转

一、前言

SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。

本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。

GOTO 语句是直观基本的控制流语句,会导致控制流发生无条件更改。它用于分流至使用 SQL 过程中定义的标签的特定用户定义位置。

使用 GOTO 语句通常被视为缺乏编程技巧,并且不推荐这样做。大量使用 GOTO 会导致代码可读性不好,特别是在过程变长时。此外,因为有更好的语句可用于控制执行路径,所以 GOTO 并非必需。没有需要使用 GOTO 的特定情况;使用它通常只是为了方便。

二、在GaussDB数据库中的概念及语法

1、基本概念
GOTO语句是一种控制语句,它用于无条件地将程序的执行跳转到指定的位置。在GaussDB数据库的SQL实现中,GOTO语句通常被用于存储过程和触发器等数据库对象中,以实现复杂的逻辑控制。

GOTO语句可以实现从GOTO位置到目标语句的无条件跳转。GOTO语句会改变原本的执行逻辑,因此应该慎重使用。当执行GOTO语句时,目标Label必须是唯一的。

2、语法

BEGIN
     --some code here
     IF condition THEN
        GOTO label;
     END IF;
     
     -- some code here  
   GOTO label;
		
<<label>>
-- code to jump to

END;
/

三、在GaussDB数据库中的基础示例和限制场景说明

1、基础示例
创建一个函数,在满足一定条件时,通过GOTO语句进行跳转。

CREATE OR REPLACE FUNCTION  proc_goto(i in integer,j in integer)
RETURNS TEXT
LANGUAGE plpgsql
AS $$
  BEGIN  
     LOOP
         INSERT INTO test_1(id,date) VALUES(i,current_date) ;
	     i := i+1;      
         IF i=j THEN  
		  	 GOTO label;					 
         END IF;  
     END LOOP;
			
     <<label>>			
   INSERT INTO test_1(id,date) VALUES(i,'3000-12-31') ;
			
	 RETURN 'succeed';
  END $$;
 
CALL proc_goto(1,5);

select * from test_1;

2、限制场景说明
GOTO使用有以下限制场景:

1、不支持有多个相同的GOTO labels目标场景,无论是否在同一个block中。

BEGIN
  GOTO label 1; 
  << label 1>>
  SELECT * FROM ...
  << label 1>>
  UPDATE t1 SET ...
END;
2、不支持GOTO跳转到IF语句,CASE语句,LOOP语句中。

BEGIN
   GOTO label 1; 
   IF valid THEN
     << label 1>>
     SELECT * FROM ...
   END IF;
 END;

3、不支持GOTO语句从一个IF子句跳转到另一个IF子句,或从一个CASE语句的WHEN子句跳转到另一个WHEN子句。

BEGIN 
   IF valid THEN
     GOTO label 1;
     SELECT * FROM ...
   ELSE
     << label 1>>
     UPDATE t1 SET ...
   END IF;
 END;

4、不支持从外部块跳转到内部的BEGIN-END块,即禁止从外层跳转到内层。

BEGIN
   GOTO label 1;  
   BEGIN
     << label 1>>
     UPDATE t1 SET ...
   END;
 END;

5、不支持从异常处理部分跳转到当前的BEGIN-END块。但可以跳转到上层BEGIN-END块。

BEGIN
   << label 1>>
   UPDATE t1 SET ...
   EXCEPTION
     WHEN condition THEN
        GOTO label 1;
 END;

6、如果从GOTO到一个不包含执行语句的位置,需要添加NULL语句。

DECLARE
   done  BOOLEAN;
BEGIN
   FOR i IN 1..50 LOOP
      IF done THEN
         GOTO end_loop;
      END IF;
      <<end_loop>>  
      NULL; 
   END LOOP;  
END;
/

四、小结

在本文中,我们介绍了GOTO语句在云数据库GaussDB SQL中的使用特点,通过一系列的示例,可以更好地组织代码,避免一些不必要的计算和操作,从而提高SQL语句的执行效率。 但同时需要注意的是,GOTO语句虽然可以用于实现复杂的逻辑控制,但也容易导致代码的可读性降低和维护困难。因此,在实际开发中,应该根据具体情况慎重使用GOTO语句。

——结束





详情参考: https://support.huaweicloud.com/gaussdb/index.html

标签:语句,BEGIN,END,GOTO,示例,GaussDB,SQL,跳转
From: https://www.cnblogs.com/xxxmut/p/18571925

相关文章

  • GaussDB SQL基础语法-变量&常量
    一、前言SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。二、GaussDB数据库中的常量和变量的基本概述及语法定义数据库中的变量和常量是两种重要的数据......
  • GaussDB整体性能慢分析
    @目录问题描述问题现象告警业务影响原因分析分析步骤分析定位方法步骤一步骤二步骤三步骤四CPU满I/O满或者I/O异常内存满网络异常步骤五并发问题数据库配置问题异常等待事件长时间性能下降短时性能抖动不优SQL问题描述整体性能慢。不满足客户作业对时延要求或者不满足客户预期。......
  • JDBC连接GaussDB云数据库操作示例
    ​目录一、实验环境二、登录华为云创建测试库表1、登录GaussDB云数据库2、建库、建表,用于测试3、新增普通角色(用户)用于登录及访问测试(可选)4、获取对应的公网IP三、创建java工程1、创建java工程2、添加jar包3、编辑Java代码四、执行并查看测试结果一、实验环境1、本......
  • GaussDB SQL基本语法示例-CASE表达式
    一、前言SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。二、CASEExpression(CASE表达式)介绍在GaussDBSQL中,CASE表达式(CASEExpression)是一个非常强大......
  • GaussDB云数据库SQL应用系列-视图管理
    ​一、前言GaussDB是一款基于云计算技术的高性能关系型数据库,支持多种数据模型和分布式架构。在GaussDB中,视图管理是非常重要的一项功能,它可以帮助用户更方便地管理和查询数据。数据库视图管理是指对数据库中的视图进行创建、修改、删除、查询等操作的过程。二、准备条件参考......
  • GaussDB云数据库SQL应用系列—索引管理
    一、前言随着互联网的快速发展,数据量呈现爆炸式增长。如何高效地管理和查询这些数据成为了企业面临的重要问题。而数据库索引作为数据库优化的关键手段之一,对于提高数据库性能和查询效率具有重要作用。本文将介绍GaussDB云数据库的索引创建和管理方法,并结合实际应用场景进行分析......
  • GaussDB云数据库SQL应用系列-基础使用
    ​目录一、前言二、前提条件1、连接数据库实例2、GaussDB实例正常运行三、操作示例1、选择实例并进入SQL执行界面2、创建数据库用户3、创建数据库4、创建SCHEMA5、创建表(增删改查)1)创建3张表,并初始化一些数据2)假设查询场景,并通过SQL实现一、前言随着云计算技术的不......
  • GaussDB数据库SQL系列-自定义函数
    一、前言华为云GaussDB数据库是一款高性能、高安全性的云原生数据库,在GaussDB中,自定义函数是一个不容忽视的重要功能。本文将简单介绍一下自定义函数在GaussDB中的使用场景、使用优缺点、示例及示例解析等,为读者提供指导与帮助。二、自定义函数(Function)概述在SQL中,自定义函数(Fu......
  • GaussDB技术解读系列:运维自动驾驶探索
    ​随着企业数字化转型进入深水区,数据库系统越来越复杂,运维团队维护的数据库规模越来越大,传统工具化的运维已无法满足当前运维的要求,数据库运维逐渐向智能化发展。如何更好地感知和预测数据库故障,进而进行智能诊断、自适应恢复,是我们一直探索的内容。接下来本篇将分享GaussDB在运......
  • GaussDB数据库SQL系列-定义重载函数
    一、前言在本文中,我们将介绍GaussDB数据库中的用户定义函数重载的概念、用法以及示例。用户定义函数是SQL中常用的“编程工具”,允许我们自定义函数来处理和操作数据。而函数重载则是指在一个数据库中定义多个具有相同名字但参数不同的函数,以此实现不同的功能。二、函数重载的......