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

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

时间:2024-09-29 11:23:39浏览次数:6  
标签:语句 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/intl/zh-cn/gaussdb/index.html

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

相关文章

  • GaussDB技术解读系列:HTAP方向的探索与发展
    ​什么是HTAP?本篇为大家分享《GaussDB在HTAP上的探索和发展》。首先,我们看一下TP和AP的特点。TP一般是做交易型的业务,它的数据量通常来说比较小,在GB~TB的范围内,它要求低时延、高吞吐,同时对高可用、故障恢复要求较高。AP一般用于对历史数据做分析,根据数据分析的结论为企业的商业......
  • GaussDB SQL基本语法示例-CASE表达式
    一、前言SQL是用于访问和处理数据库的标准计算机语言。GaussDB支持SQL标准(默认支持SQL2、SQL3和SQL4的主要特性)。本系列将以《云数据库GaussDB—SQL参考》在线文档为主线进行介绍。二、CASEExpression(CASE表达式)介绍在GaussDBSQL中,CASE表达式(CASEExpression)是一个非常强大......
  • 与 USB 优盘优化相关的 .reg 文件示例。这些设置可以帮助提高 USB 存储设备的性能和管
      WindowsRegistryEditorVersion5.00;启用快速删除模式(防止意外数据丢失)[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor]"Start"=dword:00000003;确保USB存储服务启动;提高USB数据传输速度[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servi......
  • FFmpeg 初学者需要掌握的基础知识和实用技能。每个部分可以深入讲解,提供具体的命令示
    FFmpeg初级使用教程大纲1. FFmpeg简介什么是FFmpegFFmpeg的主要功能安装FFmpeg2. 基本命令格式FFmpeg的基本命令结构输入与输出文件的指定常用选项的介绍3. 常用命令示例转换视频格式示例:将MP4转换为AVI提取音频示例:从视频中提取音频压缩视......
  • 优化 Windows 系统中的万兆网卡(10Gbps 网卡)可以通过修改注册表来实现。以下是一些常见
    优化Windows系统中的万兆网卡(10Gbps网卡)可以通过修改注册表来实现。以下是一些常见的注册表设置示例,可以帮助提高网络性能。 常用的注册表设置启用TCP窗口扩大路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters值:TcpWindowSize类型:DWORD数据:0......
  • <<迷雾>> 第 2 章 用电来表示数 示例电路
    开关的通断对应着1和0info::操作说明鼠标单击开关切换开合状态primary::在线交互操作链接https://cc.xiaogd.net/?startCircuitLink=https://book.xiaogd.net/cyjsjdmw-examples/assets/circuit/cyjsjdmw-ch02-01-represent-number-by-switch.txt原图通过使用多......
  • DAMA-CDGA 模拟试题 示例50道题
    1、关于元数据管理原则说法正确的是 A.确保员工了解如何访问和使用元数据。B.制定、实施和审核元数据标准,以简化元数据的集成和使用。C.创建反馈机制,以便数据使用者可以将错误或过时的元数据反馈给元数据管理团队。D.以上都对正确答案:D答案解析:P322.目标和原则2......
  • 06 内存地址示例 重点
    ################################回顾示例1v1=[1,2,3]#开僻内存空间v2=[1,2,3]#开僻内存空间示例二v1=[1,2,3]#v2、v3都指向变量v1内存地址v2=v1v3=v1v1.append(999)#此时v2/v3都会发生变化,因v1把内存地址中的值进行修改了示例三v......
  • 要优化和配置Windows蓝牙设备的注册表设置,可以创建一个.reg文件,帮助修改相关的注册表
    要优化和配置Windows蓝牙设备的注册表设置,可以创建一个.reg文件,帮助修改相关的注册表项。以下是详细说明及示例代码。1.创建 .reg 文件您可以使用文本编辑器(如记事本)来创建一个.reg文件。下面是一些常见的蓝牙相关注册表路径和设置。2.常用蓝牙注册表路径蓝牙服务设置:......
  • PowerShell 脚本禁用 Realtek Audio Console 中的前面板插孔检测,通常需要修改注册表项
     PowerShell脚本禁用RealtekAudioConsole中的前面板插孔检测,通常需要修改注册表项。以下是一个示例脚本,用于执行此操作:powershellCopyCode#设置注册表路径$registryPath="HKLM:\SOFTWARE\Realtek\Audio\RtkNGUI\Settings"#检查注册表路径是否存在if(-not(Test-......