工作中有一个需求,需要编写一个oracle函数返回查询结果的json格式数据.
例如有一个函数 入参为表名和主键id,该表名是动态的。
假设入参传入表名为student,id为1.
查询结果为
id name age
1 小明 15返回值即为json格式的字符串.
{"id":"1","name":"小明","age":"15"}这个函数应该如何写呢
oracle 版本为12c小弟刚接触oracle
求各位大神不吝赐教万分感谢!!!!!
例如有一个函数 入参为表名和主键id,该表名是动态的。
假设入参传入表名为student,id为1.
查询结果为
id name age
1 小明 15返回值即为json格式的字符串.
{"id":"1","name":"小明","age":"15"}这个函数应该如何写呢
oracle 版本为12c小弟刚接触oracle
求各位大神不吝赐教万分感谢!!!!!
解决方案 »
- 在命令提示符下 操作Oracle 显示结果不在一行……
- oracle9i定义游标麻烦看下哪儿错了
- 请教oracle能否直接存取XML文件
- 求高效Sql查询-oracle
- 备份过程中遇到如下问题。。。。。。
- 关于用sqlplus调用存储过程,救救小妹我吧
- oracle的8080端口问题
- godblessu(上帝保佑)接分,今天这个网站不知道怎么了,贼慢
- 用T_SQL实现的一个功能(提取95%概率大值),用PL/SQL如何实现?(急……)
- 关于数据库日志问题,请oracle高手或广大系统管理员积极参与,帮我解决难题,不胜感激
- oracle优化问题
- Oracle数据库服务器本级远程的plsql都能脸上但是直接命令sqlplus不行
select JSON_OBJECT(key 'id' value id,key 'name' value name,key 'age' value age)
from (
select 1 id,'小明' name,15 age from dual
)
但考虑到客户现场,可能有的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如果能够获取列的值就可以自行拼接了。请问前辈有好的发方法吗?
如果是 11g 的库,这些转称工作放在高级语言中更好。毕竟 Oracle 做这个事情,没那么专业。PS : 还有一个思路,就是把游标的 select 语句,变成 ctas ,再去查这个表。
所以要拼接保存json。