VastbaseG100

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

Menu

EXECUTE IMMEDIATE

功能描述

Vastbase 在SQL Server兼容模式下支持动态SQL返回结果集,即在动态SQL执行时,其中的查询结果集一个或多个可以返回到执行体外。

注意事项

  • 该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。

  • 仅支持返回查询类结果集。

  • 需设置以下GUC参数:

    • behavior_compat_options= 'block_return_multi_results'
    • enable_set_variable_mssql_format=on

语法格式

EXECUTE IMMEDIATE <动态SQL语句>

示例

前置步骤: 设置GUC参数。

set behavior_compat_options= 'block_return_multi_results';
set enable_set_variable_mssql_format=on;

示例1: execute immediate执行一条SQL语句。

1、创建测试表。

create table tab_1155390(id int,a1 text);

2、创建存储过程。

create or replace procedure pro_1155390()
as
n1 text;
begin
n1:='select * from tab_1155390 order by id';
execute immediate n1;
end;
/

3、调用存储过程查看当前数据。

call pro_1155390();

结果返回如下:

 id | a1
----+----
(0 rows)

CALL

4、插入数据并调用存储过程,验证execute immediate语句。

insert into tab_1155390 values(1,'a'),(2,'b'),(3,'c');
call pro_1155390();

结果返回如下:

 id | a1
----+----
  1 | a
  2 | b
  3 | c
(3 rows)

CALL

示例2: execute immediate执行多条SQL语句

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

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

2、创建存储过程。

create or replace procedure pro_1155391()
as
n1 text;
n2 text;
n3 text;
begin
n1:='select * from tab_1155391 order by id';
n2:='select * from tab_1155391 where id = 1 connect by pid = id order by a1;';
n3:='with temp_1155391(a1,a2) as (select id,a1 from tab_1155391 where id > 1) select * from temp_1155391;';
execute immediate n1;
execute immediate n2;
execute immediate n3;
end;
/

3、调用存储过程验证execute immediate语句。

call pro_1155391();

结果返回如下:

 id | pid |    a1
----+-----+----------
  1 |   2 | s
  2 |   3 | b
  3 |   4 | c
  4 |   5 | d
(4 rows)

 id | pid |    a1
----+-----+----------
  1 |   2 | s
(1 row)

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

CALL