VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

存储过程和匿名块支持返回多个结果集

功能描述

Vastbase G100在SQL Server兼容模式和MySQL兼容模式下,存储过程和匿名块支持返回多个结果集的功能,实现一个存储过程或匿名块中可以执行并返回一条或者多条查询结果,且每条查询结果是相互独立的。

前提条件

配置GUC参数behavior_compat_options

set behavior_compat_options=block_return_multi_results; 

注意事项

该特性仅在数据库兼容模式为SQL Server和MySQL时能够使用(即创建DB时DBCOMPATIBILITY='MSSQL'或'B'),在其他数据库兼容模式下不能使用该特性。

示例

前置步骤: 创建兼容模式为SQL Server的库db_sqlserver,并进入。(本文示例以SQL Server兼容模式为例)

CREATE DATABASE db_sqlserver DBCOMPATIBILITY='MSSQL';
\c db_sqlserver

示例: 对比配置GUC参数behavior_compat_options前后调用存储过程的变化。

1、创建测试表并向表中插入数据。

create table tb_1(id int,pid int,a1 char(8)); 
insert into tb_1 values(1,2,'s'),(2,3,'b'),(3,4,'c'),(4,5,'d'); 

2、创建存储过程。

create or replace procedure pro_1() 
as 
begin 
select id,a1 from tb_1 where id > 1; 
end; 
/

3、设置GUC参数为默认值时,调用存储过程。

set behavior_compat_options to default; 
call pro_1();

由于未设置GUC参数,不满足存储过程返回多个结果集的条件。调用存储过程时,返回报错结果如下:

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function public.pro_1() line 3 at SQL statement

4、设置GUC参数behavior_compat_options为block_return_multi_results,调用存储过程。

set behavior_compat_options=block_return_multi_results; 
call pro_1();

设置GUC参数后满足存储过程返回多个结果集的条件。调用存储过程时成功返回多个结果集,结果展示如下:

 id |    a1
----+----------
  2 | b
  3 | c
  4 | d
(3 rows)

CALL