達夢對JSON格式的處理


簡介

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條件時,該列不顯示。
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM