如何将ORDS中的SODA_DOCUMENT_T作为JSON/RESULTSET返回



如果我想使用PL/SQL在Oracle数据库中查询我的JSON文档(为JSON数据库配置,使用自主JSON数据库(,我将如何检索所需的文档并在JSON响应中将其发送回用户?

我确实注意到,不可能直接传递JSON、JSON_OBJECT_T或SODA_DOCUMENT_T,也不可能将它们转换为CLOB/BLOB,然后传递到RESULTSET变量中进行输出。

使用SODA for PL/SQL包,可以构造QBE过滤器字符串。这将允许您使用SODA_DOCUMENT_T类型。一旦您获得了想要的文档(或要循环的集合(,就可以将其序列化为文本,并在HTTP响应中输出。

下面的示例假设您有一个JSON数据库。使用标准SQL可以更容易地检索JSON列数据。

DECLARE
collection SODA_COLLECTION_T;
doc        SODA_DOCUMENT_T;
qbe        VARCHAR2(64);
BEGIN
qbe := '{"id": {"$eq": ' || :id || '}}';

collection := DBMS_SODA.OPEN_COLLECTION('MYCOLLECTION');
doc := collection.find().filter(qbe).get_one();
OWA_UTIL.mime_header('application/json');
htp.P(JSON_SERIALIZE(doc.get_json));
END;

或者,通过使用标准游标/RESULTSET输出来避免完全使用SODA包,尽管对于RESULTSET输出中的每个结果,都会有一个"json_document"键和嵌套在其中的实际文档。

DECLARE
cur SYS_REFCURSOR;
BEGIN
OPEN cur for 
select JSON_DOCUMENT 
from "MYUSER"."MYCOLLECTION" 
where JSON_EXISTS ( "JSON_DOCUMENT", '$?(@.id == $B0)' PASSING :id AS B0);
:result := cur;
END;

最新更新