如果我想使用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;