跳到正文

将 CSV 转换为 Oracle

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

你的文件
csvventas_2024.csv示例文件,357 B
你的数据库

已转换 5 行,8 处修正,无拒绝

显示
ventas_2024.csv 的前几行,每处修正都已标出
行
500412Peña MuñozMérida15/02/20241.234,50sí
600413José Ángel RuizLeón03/02/202499,90no
700414Zoë OrtízQuerétaro29/02/2024N/Así
800415Ñuño CastañedaOaxaca28/02/20247,25no
900416Iñaki OlaizolaMazatlán11/03/2024980,75sí
-- Written by IntoSQL for Oracle.

SET DEFINE OFF

CREATE TABLE ventas_2024 (
    folio VARCHAR2(8 CHAR) NOT NULL,
    cliente VARCHAR2(16 CHAR) NOT NULL,
    ciudad VARCHAR2(16 CHAR) NOT NULL,
    fecha DATE NOT NULL,
    importe NUMBER(6,2),
    pagado NUMBER(1) NOT NULL
);

INSERT ALL
    INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES ('00412', 'Peña Muñoz', 'Mérida', DATE '2024-02-15', 1234.50, 1)
    INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES ('00413', 'José Ángel Ruiz', 'León', DATE '2024-02-03', 99.90, 0)
    INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES ('00414', 'Zoë Ortíz', 'Querétaro', DATE '2024-02-29', NULL, 1)
    INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES ('00415', 'Ñuño Castañeda', 'Oaxaca', DATE '2024-02-28', 7.25, 0)
    INTO ventas_2024 (folio, cliente, ciudad, fecha, importe, pagado) VALUES ('00416', 'Iñaki Olaizola', 'Mazatlán', DATE '2024-03-11', 980.75, 1)
SELECT 1 FROM DUAL;

COMMIT;

修正

  1. 该文件以 windows‑1252 编码写入,已转换为 UTF-8。
  2. 表头在第 4 行;其上方的行未包含在内。
  3. 第 10 行("TOTAL")是合计行,因此未包含在内。
  4. 已保留 "Folio" 中的前导零:00412 仍为 00412,以文本存储。
  5. 15/02/2024 证明 "Fecha" 中的日期是日在前,因此 03/02/2024 读作 2024‑02‑03。
  6. "Importe" 中的数字使用小数逗号:1.234,50 读作 1234.50。
  7. "Importe" 中的 N/A 已读作空值(5 个值中有 1 个)。
  8. "Pagado" 包含是/否类词语(sí, no),已存储为布尔值。

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

其他示例:

从 CSV 到 Oracle,逐列说明

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

文件中第一个值列Oracle 类型脚本中
Folio00412folioVARCHAR2(8 CHAR)'00412'
ClientePeña MuñozclienteVARCHAR2(16 CHAR)'Peña Muñoz'
CiudadMéridaciudadVARCHAR2(16 CHAR)'Mérida'
Fecha15/02/2024fechaDATEDATE '2024-02-15'
Importe1.234,50importeNUMBER(6,2)1234.50
PagadosípagadoNUMBER(1)1

将脚本导入 Oracle

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

在终端中

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

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

在数据库工具中

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

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

IntoSQL 如何读取 CSV 文件

  • 会自动识别编码,包括 Windows-1252 和 UTF-16,因此重音字符和 ñ 都能完整保留。
  • 会自动识别分隔符:逗号、分号、制表符或竖线。使用分号时,像 1.234,50 这样的小数逗号会按数字读取。
  • 带引号的值可以包含分隔符和换行。

关于 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

关于 CSV 转 Oracle 的问题

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

如何将 CSV 转换为 Oracle?

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

如果我的 CSV 使用分号或制表符怎么办?

分隔符会被自动检测:逗号、分号、制表符或竖线。你也可以在"更多选项"中设置。使用分号时,像 1.234,50 这样的小数逗号会读作数字。

它使用哪些 Oracle 类型?

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

在 Oracle 中会保留前导零吗?

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

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

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

CSV 文件可以多大?

浏览器以流式方式读取 CSV,因此几 GB 的文件也能处理。在 Apple M4 笔记本电脑上,命令行转换一个 174 MB、一百万行的 CSV 不到一秒。