EXEC
功能描述
Vastbase 在 SQL Server 兼容模式下支持通过exec调用存储过程。在调用存储过程时,可存在传参不完整行为,即使用 exec proc 传参时,输入参数未指定全部入参初始值的情况。
注意事项
该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。
本功能的开启由参数mssql_format_behavior_compat_options控制。
当该参数取值为use_mssql_execute_gram时,表示Execute关键字用作SQL Server模式下的存储过程调用语法,支持调用存储过程时忽略有默认值的入参。由于Execute procedure_name语法和Execute preparedStatement语法有冲突,所以当参数包含此选项时,会屏蔽EXECUTE preparedstmt 和EXECUTE DIRECT语法。
语法格式
{ EXEC | EXECUTE } procedure_name [param_list];
其中param_list可以是如下任何之一进行组合,选项间通过逗号分隔:
{
expr |
param_name=expr |
param_name:=expr |
param_name=> expr
}[output]
参数说明
name
要执行的存储过程名称。
param_name
待执行存储过程参数的名称。
expr
待执行存储过程的参数取值,也可以是关键字DEFAULT,DEFAULT表示无赋值操作。
默认情况下无参数时可为空。当参数不为空时,可指定其值。
使用等号指定值时,应以
@参数名=value
的形式指定参数取值,参数顺序可以不按照存储过程的定义;否则当未指定参数名时应与存储过程的定义顺序保持一致。output
仅做语法及兼容,无实际功能。
示例
1、分别设置参数,开启SQL Server兼容模式下对EXECUTE、@var_name临时存储一个带格式的值功能的支持。
set mssql_format_behavior_compat_options='use_mssql_execute_gram';
set enable_set_variable_mssql_format = 1;
2、创建存储过程。
create or replace procedure pro_default(@p1 text,@p2 int,@p3 int default 123)
as
begin
raise info 'p1:%',@p1;
raise info 'p2:%',@p2;
raise info 'p3:%',@p3;
end;
/
3、通过exec调用存储过程。
不指定参数名,参数不完整按照顺序赋值:
exec pro_default 'test',1;
返回结果为如下,调用存储过程时,p3未指定则为默认值:
INFO: p1:test INFO: p2:1 INFO: p3:123 pro_default ------------- (1 row)
指定参数名,参数不完整按照顺序赋值:
execute pro_default @p1='test',@p2=1;
返回结果为如下,调用存储过程时,p3未指定则为默认值:
INFO: p1:test INFO: p2:1 INFO: p3:123 pro_default ------------- (1 row)
指定参数名,参数不完整不按照顺序赋值:
execute pro_default @p2=1,@p1='test';
返回结果为如下:
INFO: p1:test INFO: p2:1 INFO: p3:123 pro_default ------------- (1 row)
不指定参数名,参数完整按照顺序赋值:
exec pro_default 'test',1,222;
返回结果为如下,p3被赋值为指定值:
INFO: p1:test INFO: p2:1 INFO: p3:222 pro_default ------------- (1 row)
完整按照顺序赋值,使用参数默认值:
exec pro_default 'test',1,@p3=default;
返回结果为如下,p3为默认值:
INFO: p1:test INFO: p2:1 INFO: p3:123 pro_default ------------- (1 row)