oracle将查询结果变为json格式数据

qq_29336207 2018-11-29 05:53:43
工作中有一个需求,需要编写一个oracle函数返回查询结果的json格式数据.
例如有一个函数 入参为表名和主键id,该表名是动态的。
假设入参传入表名为student,id为1.
查询结果为
id name age
1 小明 15

返回值即为json格式的字符串.
{"id":"1","name":"小明","age":"15"}

这个函数应该如何写呢
oracle 版本为12c

小弟刚接触oracle
求各位大神不吝赐教

万分感谢!!!!!
...全文
4133 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29336207 2018-11-30
  • 打赏
  • 举报
回复
没办法的 ETL存储过程中要使用,因为java程序再恢复数据时使用的就是json,
所以要拼接保存json。
  • 打赏
  • 举报
回复
要是mysql就好弄多了
卖水果的net 2018-11-30
  • 打赏
  • 举报
回复
这个只能过 dbms_sql.describe_columns 方法来拆解游标结构,再逐行拼接。 如果是 11g 的库,这些转称工作放在高级语言中更好。毕竟 Oracle 做这个事情,没那么专业。 PS : 还有一个思路,就是把游标的 select 语句,变成 ctas ,再去查这个表。
qq_29336207 2018-11-30
  • 打赏
  • 举报
回复
感谢回复
但考虑到客户现场,可能有的oracle版本并不是12c 也可能是11g。所以并不能使用这个方法.
我在网上找到一个类似的。
DECLARE
TYPE ref_cursor IS REF CURSOR;
l_cursor ref_cursor;
l_curid NUMBER;
l_col_cnt NUMBER;
l_desc_tab dbms_sql.desc_tab;
BEGIN
OPEN l_cursor FOR 'select * from student where id=1';
l_curid := dbms_sql.to_cursor_number(l_cursor);
dbms_sql.describe_columns(l_curid, l_col_cnt, l_desc_tab);
FOR i IN 1 .. l_col_cnt LOOP
dbms_output.put_line(l_desc_tab(i).col_name);
END LOOP;
dbms_sql.close_cursor(l_curid);
END;


输出值为
ID
NAME
AGE

如果能够获取列的值就可以自行拼接了。

请问前辈有好的发方法吗?
jdsnhan 2018-11-30
  • 打赏
  • 举报
回复 2
12C新增加了对json的支持。很简单的实现。如:
select JSON_OBJECT(key 'id' value id,key 'name' value name,key 'age' value age)
from (
select 1 id,'小明' name,15 age from dual
)

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧