准备工作
-
数据文件示例(data.txt)
格式:逗号分隔(支持自定义分隔符)101,John,IT 102,Lisa,Sales 103,David,HR
-
数据库目标表结构
需提前创建与TXT列对应的表:CREATE TABLE employees ( emp_id NUMBER, emp_name VARCHAR2(50), dept_name VARCHAR2(50) );
创建控制文件(关键步骤)
新建 load_data.ctl
文件,内容如下:
LOAD DATA INFILE 'data.txt' -- TXT文件路径 INTO TABLE employees -- 目标表名 FIELDS TERMINATED BY ',' -- 列分隔符(可改为|、TAB等) OPTIONALLY ENCLOSED BY '"' -- 文本引号(可选) TRAILING NULLCOLS -- 允许空列 ( emp_id, -- 列顺序与TXT文件一致 emp_name, dept_name )
*执行SQLLoader命令**
在命令行中运行(根据系统调整路径):
sqlldr userid=username/password@database_service_name control=load_data.ctl log=load_results.log
- 参数说明:
username/password
:数据库账号/密码@database_service_name
:数据库服务名(如ORCL)control
:控制文件路径log
:导入日志文件(必查)
验证结果
-
检查日志文件(load_results.log)
查看关键条目:Table EMPLOYEES: 3 Rows successfully loaded. Commit point reached - logical record count 3
-
查询数据库确认
SELECT * FROM employees;
常见问题解决
问题现象 | 解决方案 |
---|---|
ORA-01722: 无效数字 | 控制文件中指定列数据类型转换 |
文件路径错误 | 使用绝对路径(如:/home/user/data.txt) |
权限不足 | 授予用户INSERT 表权限 |
中文乱码 | 在控制文件首行加 CHARACTERSET UTF8 |
高级技巧
-
跳过文件首行行)
在控制文件中添加:LOAD DATA INFILE 'data.txt' SKIP 1 -- 跳过第1行 ...
-
日期格式转换
若TXT含日期列,在控制文件指定格式:(hire_date DATE "YYYY-MM-DD")
引用说明
- 本文方法基于Oracle 12c至19c版本验证,核心工具为官方提供的SQL*Loader。
- 参考文档:
Oracle Database Utilities Guide – SQLLoader*章节
Oracle官方支持文档ID 245263.1
操作时请确保:
- 数据库服务名正确
- TXT文件与控制文件列定义严格匹配
- 日志文件无
ORA-
错误提示
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5674.html