Oracle Rest API 多行
Oracle Rest API multiple rows
我必须创建一个 API 类型的 GET 并且我必须连接两个表。
例如,我有以下表格:
Table 1:
- customer_id:{001}
- first_name:{f_name}
- last_name: {l:name}
Table 2:
- customer_id:{001} {001}
- 街道:{A 街道} {B 街道}
- zip_code:{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 类型?
这可以使用 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 数据服务产品经理。
我必须创建一个 API 类型的 GET 并且我必须连接两个表。
例如,我有以下表格:
Table 1:
- customer_id:{001}
- first_name:{f_name}
- last_name: {l:name}
Table 2:
- customer_id:{001} {001}
- 街道:{A 街道} {B 街道}
- zip_code:{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 类型?
这可以使用 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 数据服务产品经理。