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


风晓
风晓 2024-01-13 08:53:39 53286 赞同 0 反对 0
分类: 资源 标签: 国产数据库
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;

             

<

-- 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;

                    

     <

   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;

      <>         

      NULL; 

   END LOOP; 

END;

/

四、小结   

 

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

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
风晓L1
粉丝 1 资源 2038 + 关注 私信
最近热门资源
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南  2057
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访?  1994
银河麒麟桌面操作系统【保留数据盘重装系统】  1804
麒麟系统各种原因开不了机解决(合集)  1587
桌面通用(全架构)【rpm包转成deb包】操作方法  931
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题  915
统信系统安装(合集)  853
统信桌面专业版【手动分区安装UOS系统】介绍  845
统启动异常几种类型(initramfs 模式)  688
最近下载排行榜
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南 0
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访? 0
银河麒麟桌面操作系统【保留数据盘重装系统】 0
麒麟系统各种原因开不了机解决(合集) 0
桌面通用(全架构)【rpm包转成deb包】操作方法 0
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题 0
统信系统安装(合集) 0
统信桌面专业版【手动分区安装UOS系统】介绍 0
统启动异常几种类型(initramfs 模式) 0
作者收入月榜
1

prtyaa 收益393.72元

2

zlj141319 收益220.97元

3

1843880570 收益214.2元

4

IT-feng 收益213.03元

5

风晓 收益208.24元

6

777 收益172.82元

7

Fhawking 收益106.6元

8

信创来了 收益105.89元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!