簡介
JSON是一種存儲文本信息的語法格式,采用輕量級的純文本格式表示數據的層級關系,在應用接口數據傳遞中使用廣泛。
DM支持JSON數據的存儲和查詢,在DM庫中JSON以字符串形式存儲。
支持的數據類型
包括String,number,boolean,object,array;這些數據類型可以嵌套使用。
可以使用的函數
Json_value(col_name, json_name):獲取json值。有兩個參數,分別為列名和要查詢的JSON路徑表達式。
Json_query():返回一個或多個JSON數據。
測試
object類型
創建JSON數據測試表JSON_TEST
INSERT INTO JSON_TEST VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
SELECT *FROM JSON_TEST;
使用json_value函數查詢NAME
SELECT JSON_VALUE(NAME,'$.AGE') FROM JSON_TEST;
數組類型
INSERT INTO JSON_TEST VALUES(2, '["DM6","DM7","DM8"]');
SELECT *FROM JSON_TEST;
數組中的值使用下標獲取,數組下標從0開始。
SELECT JSON_VALUE(NAME,'$[0]') FROM JSON_TEST WHERE ID = 2;
約束條件
DM推薦在插入數據時對格式進行檢查,提供了 IS JSON/IS NOT JSON條件用於判斷JSON數據的合法性,判斷正確時,分別返回true/false。
示例
創建測試表,對CONTENT列添加IS JSON條件,插入數據。
CREATE TABLE JSON_TEST_02(ID INT, CONTENT VARCHAR CONSTRAINT JSON_CHECK CHECK(CONTENT IS JSON));
INSERT INTO JSON_TEST_02 VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
INSERT INTO JSON_TEST_02 VALUES(2,'TOM');
SELECT *FROM JSON_TEST_02;
可見,違反IS JSON條件的數據插入失敗。
IS NOT JSON的作用相反,可以使用此條件排除JSON數據。
CREATE TABLE JSON_TEST_03(ID INT, CONTENT VARCHAR CONSTRAINT JSON_CHECK_02 CHECK(CONTENT IS NOT JSON));
INSERT INTO JSON_TEST_03 VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
JSON_QUERY
此函數可返回多條記錄中的JSON值,必須指定 WITH WRAPPER(以array)的形式返回字符串)。單值返回時,標量需指定WITH WRAPPER,object或array不需要。
INSERT INTO JSON_TEST VALUES(1,'{"NAME":"TOM","SEX":"M","AGE":"20"}');
INSERT INTO JSON_TEST VALUES(2,'{"NAME":"LI","SEX":"W","AGE":"45"}');
INSERT INTO JSON_TEST VALUES(3,'{"NAME":"TANG","SEX":"M","AGE":"77"}');
SELECT *FROM JSON_TEST;
SELECT JSON_QUERY(NAME,'$.NAME' WITH WRAPPER) FROM JSON_TEST;
涉及的視圖
與JSON相關的視圖有DBA_JSON_COLUMNS 、 USER_JSON_COLUMNS 和
ALL_JSON_COLUMNS 。
DBA_JSON_COLUMNS
顯示數據庫中所有JSON數據信息。
USER_JSON_COLUMNS顯示當前用戶擁有的JSON信息,ALL_JSON_COLUMNS顯示當前用戶有權訪問的JSON數據信息。
列顯示規則
上述視圖中顯示的列與定義時使用的“||”,“and”,“OR”等運算符有關
- 條件中有多列時,多列都顯示。
- 使用AND時,涉及的列都顯示。
- 使用OR時,所有列都不顯示。
- 使用IS NOT JSON條件時,該列不顯示。