工作中有一个需求,需要编写一个oracle函数返回查询结果的json格式数据.
例如有一个函数  入参为表名和主键id,该表名是动态的。
假设入参传入表名为student,id为1.
查询结果为
id   name  age
1    小明      15返回值即为json格式的字符串.
{"id":"1","name":"小明","age":"15"}这个函数应该如何写呢
oracle 版本为12c小弟刚接触oracle  
求各位大神不吝赐教万分感谢!!!!!

解决方案 »

  1.   

    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
    )
      

  2.   

    感谢回复
    但考虑到客户现场,可能有的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如果能够获取列的值就可以自行拼接了。请问前辈有好的发方法吗?
      

  3.   

    这个只能过 dbms_sql.describe_columns 方法来拆解游标结构,再逐行拼接。
    如果是 11g 的库,这些转称工作放在高级语言中更好。毕竟 Oracle 做这个事情,没那么专业。PS :  还有一个思路,就是把游标的 select 语句,变成 ctas ,再去查这个表。 
      

  4.   

    要是mysql就好弄多了
      

  5.   

    没办法的  ETL存储过程中要使用,因为java程序再恢复数据时使用的就是json,
    所以要拼接保存json。