gpt4 book ai didi

sql - 从 oracle 过程返回 Json 字符串

转载 作者:行者123 更新时间:2023-12-05 02:38:54 24 4
gpt4 key购买 nike

我需要在 PL/SQL 中有一个存储过程,它返回一个包含 json 对象的字符串。此对象必须是表示表行的对象列表。

例如我有一张 table MY_TABLE(ID, TB_VALUE)

输出必须是:

[
{
"id":"1",
"value":"valueTest"
},
{
"id":"2",
"value":"valueTest2"
},
{
"id":"3",
"value":"valueTest3"
}
]

我的存储过程是这样的:

CREATE OR REPLACE PACKAGE BODY "PKG_GETCOR" AS

PROCEDURE SelectProc(output OUT VARCHAR2) IS
v_json_start CHAR(1) := '[';
v_json_end CHAR(1) := ']';
l_first_rec BOOLEAN := TRUE;

BEGIN
output := v_json_end;
FOR output IN (SELECT * FROM MY_TABLE)
LOOP
IF NOT l_first_rec
THEN
output := output || ',';
END IF;
output := output || JSON_OBJECT('id' VALUE ID, 'value' VALUE TB_VALUE));
END LOOP;
output := output || (v_json_end);
DBMS_OUTPUT.PUT_LINE(output);

END SelectProc;

END PKG_GETCOR;

实现此目标的最佳方法是什么?我应该使用 DBMS_OUTPUT.PUT_LINE 吗?

最佳答案

从 Oracle 12 开始,您不需要过程或创建自己的 JSON 函数。

SELECT JSON_ARRAYAGG(
JSON_OBJECT( KEY 'id' VALUE id, KEY 'value' VALUE tb_value )
FORMAT JSON
ORDER BY id
RETURNING CLOB
) AS json
FROM my_table;

输出:

JSON
[{"id":1,"value":"valueTest"},{"id":2,"value":"valueTest2"},{"id":3,"value":"valueTest3"}]

如果你真的想把它放在一个包中,那么把它转换成一个函数,然后把查询包装起来:

CREATE PACKAGE PKG_GETCOR AS
FUNCTION SelectFunc RETURN CLOB;
END;
/

CREATE PACKAGE BODY PKG_GETCOR AS

FUNCTION SelectFunc RETURN CLOB
IS
v_json CLOB;
BEGIN
SELECT JSON_ARRAYAGG(
JSON_OBJECT( KEY 'id' VALUE id, KEY 'value' VALUE tb_value )
FORMAT JSON
ORDER BY id
RETURNING CLOB
)
INTO v_json
FROM my_table;

RETURN v_json;
END SelectFunc;
END PKG_GETCOR;
/

然后:

SELECT pkg_getcor.selectfunc() FROM DUAL;

输出:

PKG_GETCOR.SELECTFUNC()
[{"id":1,"value":"valueTest"},{"id":2,"value":"valueTest2"},{"id":3,"value":"valueTest3"}]

db<> fiddle here

关于sql - 从 oracle 过程返回 Json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69392148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com