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