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

news2024/11/13 10:08:11

目录

一、前言

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

1、基本概念

2、语法

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

1、基础示例

2、限制场景说明

、小结

一、前言

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语句。

——结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1229802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年第十三届中国国际储能大会(CIES2023)-核心PPT资料下载

一、峰会简介 本届大会以“推动新型能源体系建设&#xff0c;促进储能产业高质量发展”为主题&#xff0c;为进一步积极探索储能领域新技术、新业态、新模式&#xff0c;推进储能产业上下游供应链深度合作&#xff0c;推动新型储能与新型电力系统协同创新&#xff0c;搭建储能…

(六)、基于 LangChain 实现大模型应用程序开发 | 基于知识库的个性化问答 (文档分割 Splitting)

在上一章中&#xff0c;我们刚刚讨论了如何将文档加载到标准格式中&#xff0c;现在我们要谈论如何将它们分割成较小的块。这听起来可能很简单&#xff0c;但其中有很多微妙之处会对后续工作产生重要影响。 文章目录 1、为什么要做文档分割&#xff1f;2、文档分割方式3、基于…

【OpenCV】仿射变换中cv2.estimateAffine2D 的原理

目录 一、介绍 二、仿射变换矩阵 (M) 1.M中六个元素的说明 2.计算旋转角度 3.M的计算过程 三、输出状态 (inliers) 四、错切参数 1.错切参数的定义 2.错切参数例子 &#xff08;1&#xff09;水平错切 &#xff08;2&#xff09;垂直错切 一、介绍 cv2.estimateAffi…

开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势未来发展方向

开源vs闭源大模型如何塑造技术的未来&#xff1f;开源模型的优劣势&未来发展方向 写在最前面一、开源与闭源&#xff1a;定义与历史背景开源和闭源的定义开源大模型&#xff1a;社区驱动的创新 二、开源和闭源的优劣势比较开源大模型&#xff08;瓶颈&#xff09;数据&…

windows中运行项目中.sh和kaggle安装与配置

在git bash中运行 命令如下&#xff1a; bash download_data.sh 或者 ./download_data.sh如果使用kaggle的数据集&#xff0c;会要求输入用户名和API。 API在这个文件里面&#xff0c;复制过来即可。 安装kaggle pip install kaggle去kaggle官网&#xff0c;点击这里&…

MES集成 | 集成标准不统一?看得帆云iPaaS怎么应对

得帆信息结合自身丰富实施经验及众多实践案例&#xff0c;编写了《得帆云 AIGC低代码PaaS平台系列白皮书——MES集成应用》&#xff0c;希望能为正在使用MES产品的企业数字化转型领导者和IT人员带来一些帮助。 MES是众多大型生产制造型企业在做生产执行管理时会实施的一套系统。…

监控电脑的软件叫什么丨科普小知识

监控电脑的软件叫电脑监控软件。 电脑监控软件是一种可以监控电脑使用情况的软件&#xff0c;通常具有记录屏幕活动、网站访问、聊天记录等功能。 应用场景 1、企业内部管理&#xff1a;企业管理者可以通过监控电脑软件来监视员工的工作活动&#xff0c;以确保员工遵守公司政…

2023年电子工程师大会暨第三届社区年度颁奖活动--【其利天下技术】

华秋电子发烧友将于2023年11月23日在深圳举办一场盛大的技术交流活动&#xff0c;即“2023年电子工程师大会暨第三届社区年度颁奖活动”。本次活动邀请了各大高校教授、企业高管、行业专家和电子工程师们齐聚一堂&#xff0c;围绕“开源硬件”、“OpenHarmony RISC-V”、“工程…

.NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !背景介绍 突然闯到路径搜索算法里…

接口测试基础与接口测试用例设计思路详解

接口测试简介 1.什么是接口 接口就是内部模块对模块&#xff0c;外部系统对其他服务提供的一种可调用或者连接的能力的标准&#xff0c;就好比usb接口&#xff0c;他是系统向外接提供的一种用于物理数据传输的一个接口&#xff0c;当然仅仅是一个接口是不能进行传输的&#x…

Redis7--基础篇3(持久化)

持久化介绍 官网地址&#xff1a; https://redis.io/docs/manual/persistence RDB(Redis DataBase)AOF(Append Only File)RDB AOF RDB模式(Redis DataBase) RDB 持久性以指定的时间间隔执行数据集的时间点快照。 实现类似照片记录效果的方式&#xff0c;就是把某一时刻的数据…

Blender烘焙AO操作及对应的python代码

&#xff08;一&#xff09;Blender软件操作 1. 导入模型&#xff08;这里省略&#xff09; 2. 材质设置 模型使用的所有材质都需要删除Surface Shader&#xff0c;没有其他多余的计算&#xff0c;可以大量缩短烘焙时间。删除之后的只留下一个材质输出节点&#xff0c;如图所…

ubuntu从源码编译gdal

删除旧版本 sudo apt remove libgdal* sudo apt remove gdal* sudo apt autoremove下载proj和gdal https://github.com/OSGeo/PROJ/releases 这里使用的是9.3.0版本&#xff1a; https://github.com/OSGeo/gdal/releases 这里使用的是3.7.3版本&#xff1a; 编译 安装…

C#中.NET 7.0 Windows窗体应用通过EF访问已有数据库并实现追加、删除、修改、插入记录

目录 一、前言 1.Database.ExecuteSqlCommand 方法不被EF7.0支持 2.SET IDENTITY_INSERT Blog {ON,OFF}不起作用 3.主键和标识列分离&#xff0c;成功实现插入与修改 二、新建本文涉及的项目 三、程序设计 1.Form1.cs源码 2.Form1.cs[设计] 四、生成和测试 1.原始表 …

【论文阅读】SPARK:针对视觉跟踪的空间感知在线增量攻击

SPARK: Spatial-Aware Online Incremental Attack Against Visual Tracking introduction 在本文中&#xff0c;我们确定了视觉跟踪对抗性攻击的一个新任务&#xff1a;在线生成难以察觉的扰动&#xff0c;误导跟踪器沿着不正确的&#xff08;无目标攻击&#xff0c;UA&#x…

删除 word 中嵌入文字下方的图片

问题&#xff1a;Word中插入图片&#xff0c;选择图片格式【衬于文字下方】后&#xff0c;无法选择图片并删除。 解决方法&#xff1a; 如图所示&#xff0c;选择 【开始】-【编辑】-【选择】-【选择对象】&#xff0c;然后鼠标放在图片位置即可选中图片进行删除操作。

React中StrictMode严格模式,导致开发环境,接口会请求两次或多次( useEffect 请求多次)

问题描述&#xff1a; 我在用 create-react-app时&#xff0c;开发环境&#xff0c;一进页面接口会请求两次或多次。 我在首页 useEffect里 请求一个接口&#xff0c;整个页面就在这里请求这一次接口。但 实际上请求了两次。我检查了代码&#xff0c;确定只调用了一次&#xf…

算法进阶——链表中环的入口节点

题目 给一个长度为n链表&#xff0c;若其中包含环&#xff0c;请找出该链表的环的入口结点&#xff0c;否则&#xff0c;返回null。 数据范围&#xff1a;1<结点值<10000 要求&#xff1a;空间复杂度O(1)&#xff0c;时间复杂度O(n) 例如&#xff0c;输入{1,2},{3,4,5…

【文末送书】计算机网络 | IO多路转接技术 | poll/epoll详解

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

麒麟KYLINOS2303系统上禁用新功能介绍页面

原文链接&#xff1a;麒麟KYLINOS2303系统上禁用新功能介绍页面 hello&#xff0c;大家好啊&#xff0c;今天给大家带来一篇在麒麟KYLINOS2303系统上禁用新功能介绍页面的文章&#xff0c;在我们安装完系统登录后&#xff0c;会发现有新功能介绍这个界面&#xff0c;我们可以通…