跳到正文

将 JSON 转换为 Oracle

拖入你的 JSON 文件,即可得到包含 CREATE TABLE 和 INSERT 语句的 Oracle 脚本。每列都会获得类型,每处修正都会连同所在行和列一起列出。

你的文件
jsonpedidos_2024.json示例文件,771 B
你的数据库

已转换 4 行,2 处修正,无拒绝

显示
pedidos_2024.json 的前几行,每处修正都已标出
行
2000481Peña Muñoz2024-02-03T10:15:00Z1234.5true
3000482José Ángel Ruiz2024-02-15T16:40:00Z99.9falseEntrega en la tarde
4000483Zoë Ortíz2024-02-29T09:05:00Z12true
5000484Ñuño Castañeda2024-03-11T13:30:00Z980.75síFactura con "RFC"
-- Written by IntoSQL for Oracle.

SET DEFINE OFF

CREATE TABLE pedidos_2024 (
    pedido VARCHAR2(8 CHAR) NOT NULL,
    cliente VARCHAR2(16 CHAR) NOT NULL,
    fecha TIMESTAMP WITH TIME ZONE NOT NULL,
    total NUMBER(6,2) NOT NULL,
    pagado NUMBER(1) NOT NULL,
    notas VARCHAR2(32 CHAR)
);

INSERT ALL
    INTO pedidos_2024 (pedido, cliente, fecha, total, pagado, notas) VALUES ('000481', 'Peña Muñoz', TIMESTAMP '2024-02-03 10:15:00 +00:00', 1234.5, 1, NULL)
    INTO pedidos_2024 (pedido, cliente, fecha, total, pagado, notas) VALUES ('000482', 'José Ángel Ruiz', TIMESTAMP '2024-02-15 16:40:00 +00:00', 99.9, 0, 'Entrega en la tarde')
    INTO pedidos_2024 (pedido, cliente, fecha, total, pagado, notas) VALUES ('000483', 'Zoë Ortíz', TIMESTAMP '2024-02-29 09:05:00 +00:00', 12, 1, NULL)
    INTO pedidos_2024 (pedido, cliente, fecha, total, pagado, notas) VALUES ('000484', 'Ñuño Castañeda', TIMESTAMP '2024-03-11 13:30:00 +00:00', 980.75, 1, 'Factura con "RFC"')
SELECT 1 FROM DUAL;

COMMIT;

修正

  1. 已保留 "pedido" 中的前导零:000481 仍为 000481,以文本存储。
  2. "pagado" 包含是/否类词语(sí),已存储为布尔值。

文件在这台电脑上转换,永远不会上传。

其他示例:

从 JSON 到 Oracle,逐列说明

上方的示例 pedidos_2024.json 由 IntoSQL 为 Oracle 写出的结果:每列在文件中的内容、获得的类型,以及第一个值在脚本中的写法。

文件中第一个值列Oracle 类型脚本中
pedido000481pedidoVARCHAR2(8 CHAR)'000481'
clientePeña MuñozclienteVARCHAR2(16 CHAR)'Peña Muñoz'
fecha2024-02-03T10:15:00ZfechaTIMESTAMP WITH TIME ZONETIMESTAMP '2024-02-03 10:15:00 +00:00'
total1234.5totalNUMBER(6,2)1234.5
pagadotruepagadoNUMBER(1)1
notas-notasVARCHAR2(32 CHAR)NULL

将脚本导入 Oracle

下载的是普通的 .sql 文件。用 Oracle 自带的工具运行即可。

在终端中

sqlplus user@//localhost/mydb @pedidos_2024.oracle.sql

脚本会关闭替换变量(SET DEFINE OFF),因此数据中的 & 符号会保持不变。

在数据库工具中

在 SQL Developer 中打开脚本,然后选择 Run Script (F5)。

关于 JSON 文件和 Oracle 需要了解的内容

IntoSQL 如何读取 JSON 文件

  • 文件可以是对象数组、在 data 等键下保存该数组的对象,或者每行一个对象(NDJSON)。
  • 每个键成为一列。值中的对象和数组以 JSON 文本保留。
  • 数字保留全部位数,ISO 8601 日期会变成日期或时间戳。

关于 Oracle 需要了解的内容

  • 是与否的值变为 NUMBER(1),存储 1 或 0,所有 Oracle 版本都支持。
  • 文本为按字符计长度的 VARCHAR2;超过 4000 字节变为 CLOB。Oracle 将空文本存储为 NULL。
  • 行通过 INSERT ALL 插入,长值会被拆分,以便 SQL*Plus 接受。

各类值在 Oracle 中的存储方式

值Oracle
是与否NUMBER(1)
整数NUMBER(10)
大整数NUMBER(19)
小数NUMBER(p,s)
浮点数BINARY_DOUBLE
日期DATE
时刻INTERVAL DAY(0) TO SECOND
带时间的日期TIMESTAMP
带时间和时区偏移的日期TIMESTAMP WITH TIME ZONE
文本VARCHAR2(n CHAR)CLOB

关于 JSON 转 Oracle 的问题

这里没有你要的答案?请通过联系页面给我们留言,会有专人回复。 联系页面

如何将 JSON 转换为 Oracle?

将文件拖到本页顶部的转换器上。它会找到表头、读取每个值并写出 Oracle 脚本,同时列出每处修正。下载脚本后用 SQL*Plus 运行。

JSON 文件需要什么结构?

对象数组、在 data 等键下保存该数组的对象,或每行一个对象(NDJSON)。每个键成为一列。

它使用哪些 Oracle 类型?

是/否值变为 NUMBER(1),整数变为 NUMBER(10),小数变为 NUMBER(p,s),日期变为 DATE,带时间的日期变为 TIMESTAMP,文本变为 VARCHAR2(n CHAR)。长度取自每列中最长的值。

在 Oracle 中会保留前导零吗?

会。像 000481 这样的代码保持为文本,因此 Oracle 将其存储为 VARCHAR2(8 CHAR),脚本中写作 '000481'。

能不用脚本直接把数据导入 Oracle 吗?

不能。请下载脚本并用 SQL*Plus 运行。PostgreSQL、MySQL、MariaDB 和 SQLite 支持通过桌面应用或命令行直接导入。

JSON 文件可以多大?

NDJSON(每行一个对象)以流式方式读取,因此在浏览器中几 GB 的文件也能处理。JSON 文档需要整体读取,因此上限取决于浏览器分配给本页的内存。桌面应用和命令行可处理任意大小的文件。