Oracle Rest API 多行

Oracle Rest API multiple rows

我必须创建一个 API 类型的 GET 并且我必须连接两个表。

例如,我有以下表格:

Table 1:

Table 2:

如果我连接这两个表,我会得到以下结果:

{
        "customer_id": 001,
        "first_name": "f_name",
        "last_name": "l_name",
        "street": "A street",
        "zip_code": "1234",
        "city": "xxxx",
        "country": xx       
    }
{
        "customer_id": 001,
        "first_name": "f_name",
        "last_name": "l_name",
        "street": "B street",
        "zip_code": "1234",
        "city": "xxxx",
        "country": xx       
    }

这是因为 table2 有两行 customer_id:"001".

但我想要这样的结果:

{
    "customer_id": 001,
    "first_name": "f_name",
    "last_name": "l_name",
    "address": [
        {
            "street": "A steet",
            "zip_code": "1234",
            "city": "xxxx",
            "country": xx
        },
        {
            "street": "B street",
            "zip_code": "1234",
            "city": "xxxx",
            "country": xx
        }
    ]
}

似乎简单的查询在这里不起作用。有没有人知道我应该如何创建这种 API 的 GET 类型?

这可以使用 GET API 的简单 SELECT 语句来创建。您需要使用 CURSOR 命令在 JSON 对象中创建嵌套数组。您需要的示例如下所示。

下面示例中的

:p_customer_id 是来自您的 API.

的某种输入参数
SELECT t1.customer_id,
       t1.first_name,
       t1.last_name,
       CURSOR (SELECT t2.street,
                      t2.zip_code,
                      t2.city,
                      t2.country
                 FROM table2 t2
                WHERE t2.customer_id = t1.customer_id)    AS address
  FROM table1 t1
 WHERE t1.customer_id = :p_customer_id;

我们将在查询中使用 CURSOR。

首先是表格和数据:

CREATE TABLE CUST (
    CUSTOMER_ID INTEGER,
    FIRST_NAME  VARCHAR2(20),
    LAST_NAME   VARCHAR2(20)
);

ALTER TABLE CUST 
    ADD CONSTRAINT CUST_PK PRIMARY KEY ( 
    CUSTOMER_ID  
    );

CREATE TABLE ADDY (
    CUSTOMER_ID INTEGER,
    STREET      VARCHAR2(20),
    ZIPCODE     VARCHAR2(5),
    CITY        VARCHAR2(20),
    COUNTRY     VARCHAR2(20)
);

ALTER TABLE ADDY 
    ADD CONSTRAINT CUST_ID FOREIGN KEY 
    ( 
     CUSTOMER_ID
    ) 
    REFERENCES CUST 
    ( 
    CUSTOMER_ID 
    ) 
    ON DELETE CASCADE 
    NOT DEFERRABLE NOVALIDATE 
;

insert into CUST values (1, 'Jeff', 'Smith');
insert into addy values (1, 'Chowning Place', '00001', 'Blacksburg', 'USA');
insert into addy values (1, 'Inkberry Ct', '00002', 'Apex', 'USA');

然后我们可以构建 REST API。

我们的模板是 cust_address/:id,我们将对其进行 GET。

GET 处理程序后面的SQL:

select customer_id,
       first_name,
       last_name,
       CURSOR(
                select street,
                       zipcode,
                       city,
                       country
                from ADDY O
                where C.customer_id = O.customer_ID
       ) address
from CUST C
where customer_id = :id

综上所述,我们的 TEMPLATE/HANDLER 组合在 ORDS 中是这样定义的(如 SQL Developer Web 中所示)

然后我们调用 API - 就在我们的浏览器中:

您需要为集合查询关闭分页(设置为 0),或者您需要将处理程序定义为集合项。

免责声明:我是 Oracle 员工和 Oracle REST 数据服务产品经理。