Oracle PLSQL导入JSON并导出为JSON文件
我不熟悉PL SQL。我已经用数据库应用程序开发虚拟机设置了一个虚拟箱(我想里面有我需要的一切,但不确定) 现在我想加载一个json文件作为一个表。 (然后做些事情) 然后再次导出它 以下是Json文件:Oracle PLSQL导入JSON并导出为JSON文件,oracle,plsql,oracle-sqldeveloper,oracle12c,Oracle,Plsql,Oracle Sqldeveloper,Oracle12c,我不熟悉PL SQL。我已经用数据库应用程序开发虚拟机设置了一个虚拟箱(我想里面有我需要的一切,但不确定) 现在我想加载一个json文件作为一个表。 (然后做些事情) 然后再次导出它 以下是Json文件: [ { "id" : 1, "created_at" : "Tue Oct 22 16:08:59 +0000 2013", "text" : "RT @Piratenpartei: Der @humanErr zur EU Datenschutzverordnung #E
[
{
"id" : 1,
"created_at" : "Tue Oct 22 16:08:59 +0000 2013",
"text" : "RT @Piratenpartei: Der @humanErr zur EU Datenschutzverordnung #EUDataP : “Starker EU-Datenschutz darf nicht scheitern” ",
"lang" : "de",
"place" : null,
"retweet_count" : 10,
"user" : {
"created_at" : "Mon Jun 03 12:37:14 +0000 2013",
"description" : "Der Bezirksverband Tübingen im Landesverband Baden-Württemberg",
"followers_count" : 122,
"id" : 1479629599,
"lang" : "de",
"name" : "BzV Tübingen",
"screen_name" : "BZV_Tuebingen",
"url" : ""
}
}, {
"id" : 2,
"created_at" : "Sat Oct 19 12:15:54 +0000 2013",
"text" : "RT @PiratenBW: Unser nächster Landesparteitag findet am 15.02.-16.02 2014 in Heidelberg statt. /s3",
"lang" : "de",
"place" : null,
"retweet_count" : 17,
"user" : {
"created_at" : "Mon Jun 03 12:37:14 +0000 2013",
"description" : "Der Bezirksverband Tübingen im Landesverband Baden-Württemberg",
"followers_count" : 122,
"id" : 1479629599,
"lang" : "de",
"name" : "BzV Tübingen",
"screen_name" : "BZV_Tuebingen",
"url" : ""
}
}
]
我所说的出口是指这样的东西:
也许还有其他问题。
是否有类似自动导入的功能。如果文件比较大,并且不清楚里面到底是什么,或者文档很差
也许我应该添加我设置的数据库软件。
我在这里有一个帐户;
我在appdevelopmentvm的虚拟盒中安装了这个:但也许我还需要其他东西
我也在研究Postgre,但这个问题是关于Oracle的 操作json的设置:
create table json_from_file (id number, data clob, constraint chk_data_is_json check (data is json));
insert into json_from_file (id, data)
values ( 1, '{
"id" : 1,
"created_at" : "Tue Oct 22 16:08:59 +0000 2013",
"text" : "RT @Piratenpartei: Der @humanErr zur EU Datenschutzverordnung #EUDataP : “Starker EU-Datenschutz darf nicht scheitern” ",
"lang" : "de",
"place" : null,
"retweet_count" : 10,
"user" : {
"created_at" : "Mon Jun 03 12:37:14 +0000 2013",
"description" : "Der Bezirksverband Tübingen im Landesverband Baden-Württemberg",
"followers_count" : 122,
"id" : 1479629599,
"lang" : "de",
"name" : "BzV Tübingen",
"screen_name" : "BZV_Tuebingen",
"url" : ""
}
}');
insert into json_from_file (id, data)
values ( 2, '
{
"id" : 2,
"created_at" : "Sat Oct 19 12:15:54 +0000 2013",
"text" : "RT @PiratenBW: Unser nächster Landesparteitag findet am 15.02.-16.02 2014 in Heidelberg statt. /s3",
"lang" : "de",
"place" : null,
"retweet_count" : 17,
"user" : {
"created_at" : "Mon Jun 03 12:37:14 +0000 2013",
"description" : "Der Bezirksverband Tübingen im Landesverband Baden-Württemberg",
"followers_count" : 122,
"id" : 1479629599,
"lang" : "de",
"name" : "BzV Tübingen",
"screen_name" : "BZV_Tuebingen",
"url" : ""
}
}');
正在更改id为2的json:
DECLARE
cl_data CLOB;
t_root_object JSON_OBJECT_T;
t_user_object JSON_OBJECT_T;
CURSOR cu_get_data is
select data
from json_from_file
where id = 2;
BEGIN
OPEN cu_get_data;
FETCH cu_get_data INTO cl_data;
CLOSE cu_get_data;
t_root_object := JSON_OBJECT_T(cl_data);
t_root_object.put('lang','ES'); -- changes "lang" in root object
t_user_object := t_root_object.get_object('user');
t_user_object.put('lang','ENG'); -- changes "lang" in root object.user
cl_data := t_root_object.to_string;
UPDATE json_from_file -- saving change in database
SET data = cl_data
WHERE id = 2;
COMMIT;
end;
将所有零件放回一起以便以后导出:
create table exported_data(data clob);
/
declare
cursor cu_parts is
select data
from json_from_file;
whole_json clob;
begin
whole_json := '['||chr(10);
for json_part in cu_parts loop
whole_json := whole_json||json_part.data;
end loop;
whole_json := chr(10)||']';
insert into exported_data(data) values (whole_json);
commit;
end;
要创建关系数据库模型,可以使用以下方法: select将把数据从json转换为普通记录,然后insert将把它放入表中。列json_id告诉我们它是从哪个json创建的
-- creates table for root elements of json
create table root_elem (json_id number, id number,create_at varchar2(100), text varchar2(4000), lang varchar2(10), place varchar2(4000), retweet_count number);
insert into root_elem(json_id, id, create_at, text, lang, place, retweet_count)
select jff.id json_id, jt.id, jt.created_at, jt.text, jt.lang, jt.place, jt.retweet_count
from json_from_file jff
, json_table(jff.data, '$[*]'
columns (id path '$.id',
created_at path '$.created_at',
text path '$.text',
lang path '$.lang',
place path '$.place',
retweet_count path '$.retweet_count'
)) jt
-- create table for user elements (root.user)
create table users_elem (json_id number, id number,created_at varchar2(100), description varchar2(4000), followers_count number, lang varchar2(100), name varchar2(100), screen_name varchar2(100), url varchar2(4000));
insert into users_elem(json_id, id ,created_at, description, followers_count, lang, name, screen_name, url)
select jff.id json_id,ida ,created_at, description, followers_count, lang, name, screen_name, url
from json_from_file jff
, json_table(jff.data, '$.user[*]'
columns (ida path '$.id',
created_at path '$.created_at',
description path '$.description',
followers_count path '$.followers_count',
lang path '$.lang',
name path '$.name',
screen_name path '$.screen_name',
url path '$.url'
)) jt
“加载”和“导出”对您来说到底意味着什么?是否要创建一个包含单个JSON列的表,加载一行数据,然后对该表运行一些查询并保存客户端应用程序(即SQL Developer)的结果?是否要将此JSON文档加载到多个关系表的多行中(即
用户
表中的一行,tweet表中的两行),然后编写查询以处理关系数据,然后重新构建不同的JSON文档?还有别的吗?先装成桌子。我想我需要建立一个全新的数据库?正确的?也许有一些自动功能?然后将整个数据库导出为json文档。所以其他人可以使用它。为一个JSON文档创建一个完整的数据库似乎有些过火,我不知道你说的将整个数据库导出为JSON文档是什么意思。您是否真的试图包含整个数据库(表空间、权限、配置设置、表定义、数据等)?或者只是您发布的JSON文档中的一些数据。您是否正在尝试将文档加载到数据库中单个表的单个行中?有一种方法可以将整个JSON有效负载加载到Oracle表中的单个JSON验证列中,然后将JSON元素提取到相同或另一个表中的其他列中。这就是你想要做的吗?不幸的是我无法上传json文件。在德国,我可以要求数据,一家公司已经超过了我。嗯,我已经要求我的数据,从REWE它是一个当地的超市,我得到了一个json文件,…这是一个超过5年的文件。什么,什么时候,地点,价格,以及他们所有的一切。是否有一种“自动”的方式将其加载到数据库中?在我看来,它是超非结构化的。它不是在创建一个rational数据库模型,对吗?加载json文件后我会得到什么?它仍然是一列中的字符串吗?不,这是在创建包含两列的表。第一个包含id,第二个包含json的部分