什么是高级?这就叫高级—openGauss(118)

23 阅读1分钟

#openGauss #入门 #安装 #数据库 #开源

知识来源:docs-opengauss.osinfra.cn/zh/

示例2:带索引的集合类型。

--演示在存储过程中对带索引集合进行操作。
openGauss=# CREATE OR REPLACE PROCEDURE index_table_proc AS
DECLARE
       TYPE TABLE_INTEGER IS TABLE OF INTEGER INDEX BY INTEGER; --定义集合类型
       TYPE TABLE_VARCHAR IS TABLE OF INTEGER INDEX BY VARCHAR; --定义集合类型
       TABLEINT_01 TABLE_INTEGER;                               --声明集合类型变量,未初始化
       TABLEINT_02 TABLE_INTEGER := TABLE_INTEGER();            --声明集合类型变量,初始化为空 
       TABLEINT_03 TABLE_INTEGER := TABLE_INTEGER();   --声明集合类型变量,初始化为空
       RES INTEGER;
BEGIN     
       TABLEINT_03(2) := 3;         --初始化指定值
       TABLEINT_03(3) := 4;         --初始化指定值
       FOR I IN 1..10 LOOP  
           TABLEINT_01(I) := I;     --成员赋值
           TABLEINT_02(I) := I + 1; --成员赋值
       END LOOP; 
       TABLEINT_01 := TABLEINT_02;  --整体赋值
       RES := TABLEINT_03(2);       --取值 
       RAISE NOTICE '%', RES;
       RAISE NOTICE '%', TABLEINT_01(1);
       RAISE NOTICE '%', TABLEINT_01(10);
END;  
/

--调用该存储过程。
openGauss=# CALL index_table_proc();

--删除存储过程。
openGauss=# DROP PROCEDURE index_table_proc;

--演示在存储过程中对嵌套集合进行操作。
openGauss=# CREATE OR REPLACE PROCEDURE nest_table_proc AS
DECLARE
       TYPE TABLE_INTEGER IS TABLE OF INTEGER INDEX BY INTEGER;           --定义集合类型
       TYPE NEST_TABLE_INTEGER IS TABLE OF TABLE_INTEGER INDEX BY INTEGER;--定义集合类型
       NEST_TABLE_VAR NEST_TABLE_INTEGER;                                 --声明嵌套集合类型的变量
BEGIN 
       FOR I IN 1..10 LOOP  
               NEST_TABLE_VAR(I)(I) := I; 
       END LOOP; 
       RAISE NOTICE '%', NEST_TABLE_VAR.COUNT;
       RAISE NOTICE '%', NEST_TABLE_VAR(1)(1);
       RAISE NOTICE '%', NEST_TABLE_VAR(10)(10);
END;  
/

--调用该存储过程。
openGauss=# CALL nest_table_proc();

--删除存储过程。
openGauss=# DROP PROCEDURE nest_table_proc;

#openGauss #入门 #安装 #数据库 #开源

知识来源:docs-opengauss.osinfra.cn/zh/