繁体   English   中英

Oracle Rest API 多行

[英]Oracle Rest API multiple rows

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

例如,我有以下表格:

表格1:

  • customer_id:{001}
  • 名字:{f_name}
  • 姓氏:{l:name}

表 2:

  • customer_id:{001} {001}
  • 街道:{A 街道} {B 街道}
  • 邮政编码:{1234} {1234}
  • 城市:{xxxx} {xxxx}
  • 国家:{xx} {xx}

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

{
        "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 类型吗?

我们将在查询中使用 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 - 就在我们的浏览器中:

在此处输入图像描述

您需要关闭 Collection Query 的分页(设置为 0),或者您需要将处理程序定义为 Collection Item。

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

这可以使用简单的SELECT语句为您的 GET API 创建。您需要使用CURSOR命令在您的 JSON object 中创建嵌套的 arrays。您可以在下面看到您需要的示例。

下面示例中的 :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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM