GaussDB SQL基礎語法示例-迴圈語句

MySQL成长之路發表於2024-10-28

一、前言

SQL是用於訪問和處理資料庫的標準計算機語言。GaussDB支援SQL標準(預設支援SQL2、SQL3和SQL4的主要特性)。

本系列將以《雲資料庫GaussDB—SQL參考》為主線進行介紹。

二、GaussDB資料庫總的迴圈語句

在GaussDB資料庫中,迴圈語句是一種常用的控制流語句,用於在資料庫查詢中執行重複操作。透過使用迴圈語句,我們可以靈活地處理資料集中的每一行,並根據需要對資料進行轉換、過濾或計算。迴圈語句在處理大規模資料、進行復雜計算和操作時具有顯著的優勢。

在GaussDB資料庫中,迴圈語句主要包括LOOP、WHILE LOOP、FOR LOOP和FORALL等語句。這些語句用於在資料庫查詢中執行重複操作,並可以根據需要選擇合適的迴圈型別來處理資料集中的每一行。 本文將介紹GaussDB資料庫中的迴圈語句及其應用。

三、GaussDB中常用迴圈語句(語法 + 示例)

1、LOOP迴圈語句
LOOP迴圈是一個無限迴圈,直到顯式地使用EXIT語句退出迴圈。在迴圈體內部,可以根據條件執行重複的查詢操作。例如,可以使用IF語句在每次迴圈時檢查條件,並執行相應的操作。

語法:

LOOP

statements 

END LOOP;

Tip: 該迴圈必須要結合EXIT使用,否則將陷入死迴圈。

示例:

---插入多條資料,i是欄位id起始值,j終止值。

CREATE OR REPLACE PROCEDURE proc_loop(i in integer,j in integer)

AS

  BEGIN 

     LOOP 

         -- 執行重複的插數操作 

         INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp) ;

                 

                 --id值遞增 +1

                 i := i+1;             

     

         -- 退出迴圈的條件 

         IF i=j THEN 

            EXIT; 

         END IF; 

      END LOOP; 

   END;

 /

CALL proc_loop(1,5);

SELECT * FROM test_1;

2、WHILE … LOOP 迴圈語句
WHILE … LOOP迴圈是一個有條件的迴圈,只要滿足指定的條件,迴圈就會繼續執行。在迴圈體內部,可以執行重複的查詢操作。當條件不再滿足時,迴圈會終止。

語法:

WHILE condition LOOP

statements

END LOOP;

示例:

---插入多條資料,i是欄位id起始值,j終止值。

CREATE OR REPLACE PROCEDURE proc_loop_1(i in integer,j in integer)

AS

BEGIN 

  WHILE i < j LOOP 

    -- 執行重複的查詢操作 

    INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp);

       

        --id值遞增 +1

      i := i+1;

  END LOOP; 

END;

/

CALL proc_loop_1(5,10);

SELECT * FROM test_1;

3、FOR … LOOP迴圈語句(integer變數)
FOR LOOP迴圈是按照指定的次數執行迴圈。在迴圈體內部,可以執行重複的查詢操作。

語法:

FOR name IN [REVERSE] lower_bound ..upper_bound [BY step] LOOP

staements

END LOOP;

Tip: 變數name會自動定義為integer型別並且只在此迴圈裡存在。變數name介於lower_bound和upper_bound之間。 當使用REVERSE關鍵字時,lower_bound必須大於等於upper_bound,否則迴圈體不會被執行。

示例:

---插入多條資料,i是欄位id起始值,j終止值。

CREATE OR REPLACE PROCEDURE proc_loop_2(i in integer,j in integer)

AS

BEGIN 

  FOR i IN i..j LOOP 

    -- 執行重複的查詢操作 

    INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp);

       

  END LOOP; 

END;

/

CALL proc_loop_2(10,15);

SELECT * FROM test_1;

4、FORALL迴圈語句(批次查詢)
FORALL迴圈是一種並行化的迴圈,用於在資料集上執行並行操作。它適用於處理大規模資料集,可以利用多核處理器並行執行查詢操作。

語法:

FORALL index IN lower_bound .. upper_bound DML;

Tip:變數index會自動定義為integer型別並且只在此迴圈裡存在。index的取值介於low_bound和upper_bound之間。

示例:

---插入多條資料,

CREATE OR REPLACE PROCEDURE proc_loop_3(i in integer,j in integer)

AS

BEGIN

    FORALL i IN i..j

       -- 執行重複的查詢操作 

       INSERT INTO test_1(id,c_times) VALUES(i,current_timestamp);

END;

/

CALL proc_loop_3(16,20);

SELECT * FROM test_1;

四、小結

本文介紹了GaussDB資料庫中的迴圈語句及其使用方法。迴圈語句提供了靈活的資料處理能力。透過掌握迴圈語句的用法,我們可以更好地利用GaussDB資料庫的功能,提高資料處理效率和查詢效能。

——結束
https://support.huaweicloud.com/intl/zh-cn/gaussdb/index.html

相關文章