[英]Oracle Rest API multiple rows
我必须创建 API 的 GET 类型,并且必须连接两个表。
例如,我有以下表格:
表格1:
表 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 类型吗?
我们将在查询中使用 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.