更新时间:2022-09-01 GMT+08:00

存储过程调用

当前数据API不支持直接创建存储过程,但是可以执行MySQL、Oracle、PostgreSQL这三种数据源的存储过程,以Oracle数据库为例说明。

数据源说明

假设数据库里面有一张表,表结构如下建表语句所示:

create table sp_test(id number,name varchar2(50),sal number);

往表中并插入数据,数据集如下表所示:

表1 sp_test表数据集

ID

NAME

SAL

1

ZHANG

5000

2

LI

6000

3

ZHAO

7000

4

WANG

8000

在Oracle数据库中调用存储过程,根据name查询sal的值。

create or replace procedure APICTEST.sb_test(nname in varchar, nsal out number) as
begin
	select sal into nsal from sp_test where name = nname;
end;

数据API中的执行语句说明

数据API调用存储过程时,参数可通过后端服务请求的Headers、Parameters或者Body传递,参数名的语法为:{参数名}.{数据类型}.{传输类型}

  • 数据类型包括String和int。
  • 传输类型指入参或出参声明,入参使用in,出参使用out

数据API中调用存储过程的执行语句示例:

call sb_test(${nname.String.in},${nsal.int.out})

该脚本示例中,nname为字符串类型的入参,参数名为nname.String.in ,value则是你要查询的参数值。nsal为数值类型的出参,参数名为nsal.int.out,由于格式限定,出参的value也需要填写,可填写符合数据类型的任意值,不影响输出结果。

  • 数据API中对存储过程的调用,用String和int来区分字符串和数值,无需加单引号,这一点和SQL要求不一样。
  • 在后端服务的Headers、Parameters或者Body中定义的参数名不能相同,否则将被覆盖。
  • Body传递参数示例:

    后端服务请求的Body内容

    {
      "nname.String.in": "zhang",
      "nsal": 0
    }

    响应结果

    {
      "test": [
        5000
      ]
    }
  • Parameters传递参数示例:

    后端服务请求的Parameters内容

    https://example.com?nname.String.in=zhang&nsal=0

    响应结果

    {
      "test": [
        5000
      ]
    }