VastbaseG100

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

Menu

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)
    

相关链接

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