作業中有一個需求,需要撰寫一個oracle函式回傳查詢結果的json格式資料.
例如有一個函式 入參為表名和主鍵id,該表名是動態的。
假設入參傳入表名為student,id為1.
查詢結果為
id name age
1 小明 15
回傳值即為json格式的字串.
{"id":"1","name":"小明","age":"15"}
這個函式應該如何寫呢
oracle 版本為12c
小弟剛接觸oracle
求各位大神不吝賜教
萬分感謝!!!!!
uj5u.com熱心網友回復:
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
)
uj5u.com熱心網友回復:
感謝回復但考慮到客戶現場,可能有的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
如果能夠獲取列的值就可以自行拼接了。
請問前輩有好的發方法嗎?
uj5u.com熱心網友回復:
這個只能過 dbms_sql.describe_columns 方法來拆解游標結構,再逐行拼接。如果是 11g 的庫,這些轉稱作業放在高級語言中更好。畢竟 Oracle 做這個事情,沒那么專業。
PS : 還有一個思路,就是把游標的 select 陳述句,變成 ctas ,再去查這個表。
uj5u.com熱心網友回復:
要是mysql就好弄多了uj5u.com熱心網友回復:
沒辦法的 ETL存盤程序中要使用,因為java程式再恢復資料時使用的就是json,所以要拼接保存json。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/57102.html
標籤:開發
上一篇:Neo4j圖資料庫為什么可以重復插入同一條資料,怎么可以不重復插入
下一篇:sql 請教!!!!!!
