GaussDB SQL基础语法示例-GOTO语句
一、前言 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语句。
——结束

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hugging Face 年度回顾:2023,开源大模型之年
查看本文完整链接,请点击文末阅读原文 在 2023 年,大型语言模型(Large Language Models,简称 LLMs)受到了公众的广泛关注,许多人对这些模型的本质及其功能有了基本的了解。是否开源的议题同样引起了广泛的讨论。在 Hugging Face,我们对开源模型抱有极大热情。开源模型的优势在于,它们不仅促进了研究的可复制性,还鼓励社区参与到人工智能模型的开发中来,这样做有助于我们更容易地审视模型中可能存在的偏差和局限性。此外,通过重复利用已有的检查点,我们还能够减少整个领域的碳足迹(这只是 众多优点 中的一部分)。 让我们一起回顾开源 LLMs 在过去一年的发展历程吧! 为了确保本文篇幅适中,我们将不涉及代码模型的相关内容。 🍜 预训练大型语言模型的配方 首先,如何获得一个大型语言模型呢?(如果你对此已有所了解,可以跳过这部分内容。) 模型的 架构(即其代码表示)定义了它的具体实现和数学结构:这包括所有的相关参数,以及这些参数如何与输入数据进行交互。目前,大多数高性能的大型语言模型(LLMs)都是基于 “仅解码器”(decoder-only)的 Transformer...
- 下一篇
10 种 Kubernetes 声明式配置管理的方式,你都了解多少?
Kubernetes 已经成为管理容器化应用程序的事实标准,但随着其普及,管理其配置的复杂性也随之增加。为了应对这种复杂性,Kubernetes 声明式配置管理模型应运而生,以简化这一流程。在本文中,我们将探讨什么是 Kubernetes 声明式配置,为什么它是必需的,以及可以通过哪些不同的方式来管理它。 什么是 Kubernetes 声明式配置 Kubernetes 声明式配置是指在 Kubernetes 清单文件中声明应用程序及其资源所期望的状态的做法,与其发布命令式指令来改变集群的状态,不如简单地描述预期的状态,让 Kubernetes 去努力使实际状态与声明的状态相匹配。具体来说,在声明式 API 中,你描述你想要的“什么”(例如,我想要一个运行特定镜像的 Pod),而不是你想要进行的一系列操作来实现某个目标状态(即“如何”实现)。这种模型简化了系统交互,因为用户只需关注最终目标,而不必处理达到该目标的具体步骤。 Kubernetes 的声明式 API 通常是通过 YAML 或 JSON 格式的清单(Manifests)文件来使用的。这些文件定义了 Kubernetes 资源(...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Mario游戏-低调大师作品
- CentOS7安装Docker,走上虚拟化容器引擎之路