示例 SQL 语句,使用 JSON2BSON、 BSON2JSON 和 JSON_VAL 函数
以下示例展示了如何使用SQL与 JSON2BSON、 BSON2JSON 和JSON_VAL函数处理JSON数据。
示例:创建表来存储JSON数据
以下示例创建了用于存储JSON数据的表。CREATE TABLE JSONPO( ID INTEGER NOT NULL,
DATA BLOB(16M) INLINE LENGTH 25000,
PRIMARY KEY(ID)) CCSID UNICODE;
CREATE TABLE JSONCUSTOMER
( ID INTEGER NOT NULL,
DATA BLOB(16M) INLINE LENGTH 25000,
PRIMARY KEY(ID)) CCSID UNICODE;
CREATE TABLE JSONPOTXT( DATA VARCHAR(5000)) CCSID UNICODE;示例:使用JSON数据创建表索引
以下示例在JSONCUSTOMER表的 Customer.age 列和 Customer.name 列上创建索引。CREATE INDEX IX2 ON JSONCUSTOMER (JSON_VAL(DATA, 'Customer.age', 'i:na'),
JSON_VAL(DATA, 'Customer.name', 's:20:na'));示例:将JSON数据插入到表中
以下示例将采购订单JSON数据插入JSONPO表中,将客户信息插入JSONCUSTOMER表中。
INSERT INTO JSONPO VALUES (
101,
SYSTOOLS.JSON2BSON(
'{"PO":{"@id": 101,
"@orderDate": "2014-11-18",
"customer": {"@cid": 999},
"items": {
"item": [{"@partNum": "872-AA",
"productName": "Lawnmower",
"quantity": 1,
"USPrice": 149.99,
"shipDate": "2014-11-20"
},
{"@partNum": "945-ZG",
"productName": "Sapphire Bracelet",
"quantity": 2,
"USPrice": 178.99,
"comment": "Not shipped"
}
]
}
}
}')
);
INSERT INTO JSONPO VALUES (
102,
SYSTOOLS.JSON2BSON(
'{"PO":{"@id": 102,
"@orderDate": "2014-12-20",
"customer": {"@cid": 888},
"items": {
"item": [{"@partNum": "872-AA",
"productName": "Lawnmower",
"quantity": 1,
"USPrice": 749.99,
"shipDate": "2014-12-21"
},
{"@partNum": "837-CM",
"productName": "Digital Camera",
"quantity": 2,
"USPrice": 199.99,
"comment": "2014-12-22"
}
]
}
}
}'));
INSERT INTO JSONCUSTOMER VALUES (
101,
SYSTOOLS.JSON2BSON(
'{"Customer":{"@cid": 999,
"name": "Michael",
"age": 31,
"telephone": "234-343-2343",
"country": "USA"
}
}'));
INSERT INTO JSONCUSTOMER VALUES (
102,
SYSTOOLS.JSON2BSON(
'{"Customer":{"@cid": 888,
"name": "George",
"age": 29,
"telephone": "133-144-9999",
"country": "USA"
}
}'));
以下示例将JSON文档插入VARCHAR列。 JSON2BSON 此操作无需
INSERT INTO JSONPOTXT VALUES (
'{"PO":{"@id": 103,
"@orderDate": "2014-06-20",
"customer": {"@cid": 888},
"items": {
"item": [ { "@partNum": "872-AA",
"productName": "Lawnmower",
"quantity": 1,
"USPrice": 749.99,
"shipDate": "2014-06-21"
},
{ "@partNum": "837-CM",
"productName": "Digital Camera",
"quantity": 2,
"USPrice": 199.99,
"comment": "2014-06-22"
}
]
}
}
}');
示例:显示JSON数据
以下示例显示JSONPO表中整个JSON数据作为文本。SELECT ID, SYSTOOLS.BSON2JSON(DATA)
FROM JSONPO; 下面的示例将BSON格式转换为JSON格式,并将整个JSON数据显示为文本。SELECT SYSTOOLS.BSON2JSON(SYSTOOLS.JSON2BSON((SELECT DATA FROM JSONPOTXT)))
FROM SYSIBM.SYSDUMMY1; 以下示例按降序显示客户ID JSON数据。SELECT SYSTOOLS.BSON2JSON(DATA)
FROM JSONPO
ORDER BY JSON_VAL(DATA, 'PO.customer.@cid', 'i') DESC;示例:检索JSON数据
以下示例检索年龄超过30岁的客户姓名。SELECT JSON_VAL(DATA,'Customer.name', 's:20') "Name"
FROM JSONCUSTOMER
WHERE JSON_VAL(DATA,'Customer.age', 'i') > 30;以下示例从JSONPO表中检索2014年的采购订单。SELECT SYSTOOLS.BSON2JSON(DATA)
FROM JSONPO
WHERE YEAR(JSON_VAL(DATA,'PO.@orderDate', 'd')) = 2014;以下示例检索了年龄在30岁以上的顾客购买的第一件商品。SELECT JSON_VAL(T2.DATA,'PO.items.item.0.productName', 's:10') AS "Item"
FROM JSONCUSTOMER T1, JSONPO T2
WHERE JSON_VAL(T1.DATA, 'Customer.@cid', 'i') = JSON_VAL(T2.DATA, 'PO.customer.@cid', 'i') AND
JSON_VAL(T1.DATA,'Customer.age', 'i') > 30;示例:更新表格中的JSON数据
以下示例更新了客户信息。UPDATE JSONCUSTOMER
SET DATA = SYSTOOLS.JSON2BSON('{"Customer":{"@cid": 777,
"name": "George",
"age": 29,
"telephone": "566-898-1111",
"country": "USA"
}
}')
WHERE JSON_VAL(DATA, 'Customer.@cid', 'i:na') = 888; 示例:删除表格中的 JSON 数据
以下示例删除表格中的JSON数据:DELETE FROM JSONCUSTOMER
WHERE JSON_VAL(DATA, 'Customer.@cid', 'i:na') = 777;