達夢資料庫處理JSON文字的方法

2021-10-04 04:30:51 字數 4147 閱讀 7811

json是基於純文字的輕量級資料交換格式,在web應用端有廣泛的應用。在dm中json資料以字串型別儲存,可以支援對於要存入的json資料格式的正確性檢查,儲存json資料並提供函式對於json文字進行查詢。下面用幾個例子來說明在dm中操作json文字的方法。

建立test1表並在test1表中儲存json文字,info列的資料型別需要為字元型別,可以選擇varchar、varchar2、char、clob等作為儲存欄位的資料型別。

create

table test1 (info varchar

(100))

;insert

into test1 values(''

);select

*from test1;

對於儲存下來的json資料,dm提供了函式json_value和json_query對於json文字中的值進行查詢。現運用json_value函式查詢鍵為db_name所對應的值。使用函式json_value必須給定兩個引數,第乙個為查詢表中的列名,第二個為查詢值的路徑表示式。在路徑中array物件和object物件必須以「$」開頭。

select json_value(info,

'$.db_name'

)from test1;

通過查詢可以獲取到db_name所對應的值為「dm」。除了如上例中object物件外,dm還可以儲存array物件並查詢array中的值。陣列的下標從0開始,利用「[下標]」的方式可以查詢到對應的值。

create

table test2 (info char

(100))

;insert

into test2 values

('["dameng",8,true,null]');

select

*from test2;

select json_value(info,

'$[0]'

)from test2;

對於需要儲存的資料檢查其是否為json文字,可以加入is json條件進行判斷。可以在建表的過程中加入到檢查約束中進行判斷,也可以在插入資料時新增條件,對於插入的資料進行篩選。

create

table test3(id int

,info varchar

(100

)constraint json_check check

(info is json));

insert

into test3 values(1

,'');

符合json資料格式的值會被儲存下來,而錯誤的格式在插入資料時不能滿足is json的檢查約束,會提示「違反check約束[json_check]」。

insert

into test3 values(2

,'');

insert

into test3 values(3

,'dameng'

);

如果不新增約束,也可以在條件中篩選json格式的資料,例如在下面的示例中我們建立test4表,並插入四行資料,其中兩行符合json資料的合法性。

create

table test4(id int

,info varchar

(100))

;insert

into test4 values(1

,'');

insert

into test4 values(2

,'');

insert

into test4 values(3

,'dameng');

insert

into test4 values(4

,'["dameng",8,true,null]'

);

而在建立test5表的時候在where子句中帶上對於json資料的檢查條件,可以僅將符合json資料插入到test5中。

create

table test5 as

select

*from test4 where info is json;

select

*from test5;

在篩選時也可以指定條件為is not json來排除掉json格式的資料。

對於帶有json資料的檢查約束進行查詢,可以通過資料字典user_json_columns、all_json_columns、dba_json_columns查詢到相關的結果。在前面的例子中test3表新增了列級的檢查約束用於檢查該列json格式的合法性,以查詢all_json_columns為例,查詢結果如下:

select

*from all_json_columns;

而對於與json相關的表級約束,如果約束中的判斷條件為「與」關係,則在資料字典all_json_columns中相關列的資訊都會顯示在其中;而如果約束中判斷條件為「或」關係,則兩者都不會在all_json_columns中體現,即使「或」關係中兩者的判斷條件都是is json。而is not json的條件在無論是單獨的約束,或者和其他條件以「與」或者「或」關係一起進行組成約束條件,都不會在all_json_columns**現。

從結果中可以看到test7的兩列都在all_json_columns中,而test8中約束條件裡的列都不在all_json_columns中,因此有可能部分約束中對於是否json資料的判斷起到了約束作用,而all_json_columns中沒有反映出,我們在設定json的約束時應該注意到這一點。

達夢資料庫故障處理流程

收集資訊,對問題定性。分析定位問題,找到原因。能處理當場處理 無法處理的則重現問題。問題反饋,上報bug。問題定性 確定問題的重要性 確定問題的緊迫性 問題的種類 a b c 等專案的狀態 上線 開發 測試 影響範圍 點 面 使用者關切度 非常 一般 客戶關係度 好 一般 緊張 問題種類 a 最嚴重...

達夢資料庫對會話的處理

查詢會話的一些資訊,可用於殺掉會話查詢sess id select a.sess id as 會話id,a.sql text as sql語句,a.state as 會話狀態,a.n used stmt as 當前會話使用控制代碼數量,a.curr sch as 當前模式,a.user name a...

達夢資料庫和mysql索引引擎 達夢資料庫 索引

1.索引的種類和功能 聚集索引 每乙個普通表有且只有乙個聚集索引 唯一索引 索引資料根據索引鍵唯一 函式索引 包含函式 表示式的預先計算的值 位圖索引 對低基數的列建立位圖索引 位圖連線索引 針對兩個或者多個表連線的點陣圖索引,主要用於資料倉儲中 全文索引 在表的文字列上而建的索引。2.何時使用索引...