在工作中,我们提供其他服务的文件。它们的大小在5mo至500mo之间。
我们想使用Json而不是XML,但是我想知道我们的客户如何
将这些文件以简单的方式上传到他们的数据库Oracle或Mysql中。
我的意思是,我无法在Web上找到APi或Mysql或oracle中的函数或工具来做到这一点。
我知道按数据处理数据以加载一个小的Json文件并对其进行解码很容易
对象或数组,并将它们放在数据库中的正确位置。
但是还有其他方法可以做到这一点,例如Oracle中的sqlloader吗?
如果是这样,我们的文件大小是否太大而无法生成JSON文件,例如在JAVA中?
我想可能很难自动完成此加载工作,尤其是由于这样的数组:
{"employees":[
{"firstName":"John", "lastName":"Doe", "salaryHistory":[1000,2000,3000]},
{"firstName":"Anna", "lastName":"Smith", "salaryHistory":[500,800]},
{"firstName":"Peter", "lastName":"Jones", "salaryHistory":[400]}
]}
薪资历史必须产生问题的地方,因为它们的大小不同,并且数据不是强制性的
在同一张桌子上。
任何想法或帮助都将受到欢迎!
编辑
我正在寻找一种将每个数据放在表的好列中的解决方案,我不需要在简单表的单列中存储Json结构。
像这样 :
表employees:列是id,FirstName,lastName和
表saliveHistory:列是id,order,salary
并且每个数据都必须放在好列中,例如名字中的“ John”,姓氏中的“ Doe”,然后是表薪水历史记录的新行中的“ 1000”,而另外一个薪水历史记录的新行中的“ 2000”,等等。
最佳答案
从MySQL 5.7开始,有一个新的数据类型:JSON。
请查看here了解更多详细信息。
对于Oracle 12c Example:
create table transactions (
id number not null primary key,
trans_msg clob,
constraint
check_json check (trans_msg is json)
);
常规插入:
insert into transactions
values
(
sys_guid(),
systimestamp,
'{
"TransId" : 3,
"TransDate" : "01-JAN-2015",
"TransTime" : "10:05:00",
"TransType" : "Deposit",
"AccountNumber" : 125,
"AccountName" : "Smith, Jane",
"TransAmount" : 300.00,
"Location" : "website",
"CashierId" : null,
"ATMDetails" : null,
"WebDetails" : {
"URL" : "www.proligence.com/acme/dep.htm"
},
"Source" : "Transfer",
"TransferDetails" :
{
"FromBankRouting" : "012345678",
"FromAccountNo" : "1234567890",
"FromAccountType" : "Checking"
}
}'
)
/
SQL * Loader控制文件和数据文件:
load data into table transactions
fields terminated by ','
(
trans_id sequence(max,1),
fname filler char(80),
trans_body lobfile(fname) terminated by EOF
)