LoginSignup
8
7

More than 5 years have passed since last update.

Oracle RDBMS に JSONデータを格納する

Posted at

JSON within the Oracle Database

JSON形式のデータをOracle Database で扱うサンプル

  • Oracle Database 12c (12.1.0.2)では JSON形式のデータを CLOB, BLOB,VARCHAR2 のデータ型に格納可能 (格納サイズやアプリケーションによって選択)
  • JSON形式のチェック制約が追加

例)JSON格納表の作成
CREATE TABLE JSON (doc CLOB CONSTRAINT valid_json CHECK (doc IS JSON));

JSON形式データの挿入
- Insert文で格納可能
INSERT INTO JSON VALUES (
'{
"firstName": "Gerald",
"lastName": "Venzl",
"location": {
"country": "UK",
"city": "London",
"postCode": "EC2M"
}
}');
commit;

  • チェック制約違反の例 INSERT INTO JSON VALUES ('Invalid Json'); INSERT INTO JSON VALUES ('Invalid Json') * ERROR at line 1: ORA-02290: check constraint (TEST.VALID_JSON) violated Retrieving JSON data

JSON形式で格納されたデータの検索

... の形式で指定が可能
(大文字/小文字の区別があるので注意)
  • 検索した例) SELECT j.doc.firstName, j.doc.location.city FROM JSON j;

FIRSTNAME LOCATION


Gerald London

  • 表示列名の制御は2つのパターンがある a) JSON_TABLE関数を使用 b) AS 句でエイリアスを指定 例) SELECT j.doc.firstName as "First Name", j.doc.location.city as "City" FROM JSON j;

別の例として JSONデータを格納
(前回とちがって postcode 属性は なしで、middleName属性を持っている)
INSERT INTO JSON VALUES (
'{
"firstName": "Dominic",
"middleName": "Patrick",
"lastName": "Giles",
"location": {
"country": "UK",
"city": "London"
}
}');
commit;

  • middleName属性の検索例 SELECT j.doc.firstName, j.doc.middleName, j.doc.lastName FROM JSON j;

FIRSTNAME MIDDLENAME LASTNAME


Gerald Venzl
Dominic Patrick Giles

1行目のデータにはmiddleName属性値はないが検索はエラーとならずに
NULLとして返してくれる
属性が追加/削除されてもデータの変更なしでアプリ側で必要なデータのみ
アクセスすることが可能

SELECT j.doc.lastName,
j.doc.location.city as "CITY",
j.doc.location.postCode as "POST CODE"
FROM JSON j;

LASTNAME CITY POST CODE


Venzl London EC2M
Giles London

https://blogs.oracle.com/developer/entry/series_json_within_the_oracle

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7