云数据库 GAUSSDB-循环语句:FOR_LOOP查询语句

时间:2024-11-13 14:46:17

FOR_LOOP查询语句

语法图

for_loop_query::=语句如图7所示。

图7 for_loop_query::=

label declaration ::=语句如如图8所示。

图8 label declaration ::=
  • 变量target会自动定义,类型和query的查询结果的类型一致,并且只在此循环中有效。target的取值就是query的查询结果。
  • query可以使用EXECUTE增加动态查询,通过USING向查询插入参数。详见示例中的动态查询相关内容。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
--循环输出查询结果。
gaussdb=# CREATE OR REPLACE PROCEDURE proc_for_loop_query()
AS 
    record VARCHAR2(50);
BEGIN 
    FOR record IN SELECT spcname FROM pg_tablespace LOOP 
    dbe_output.print_line(record); 
    END LOOP; 
END; 
/
CREATE PROCEDURE

--调用存储过程
gaussdb=# CALL proc_for_loop_query();
pg_default
pg_global
 proc_for_loop_query 
---------------------

(1 row)

--删除存储过程
gaussdb=# DROP PROCEDURE proc_for_loop_query;
DROP PROCEDURE

--动态查询
gaussdb=# CREATE TABLE t1(id int);
gaussdb=# INSERT INTO t1 VALUES(1);
gaussdb=# 
DECLARE 
a int := 1;
item t1%rowtype;
BEGIN
    FOR item IN EXECUTE 'SELECT * FROM t1 WHERE id = :1' USING a LOOP
        RAISE INFO '%', item;
    END LOOP;
END;
/
INFO:  (1)
ANONYMOUS BLOCK EXECUTE
gaussdb=# DROP TABLE t1;
support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0786.html