plsql 保存csv文件 到oracle 数据库中。

本文详细介绍了在Oracle数据库中使用PLSQL进行建表的过程,并分享了如何通过文本导入器将CSV文件中的数据导入到已创建的表中。从选择正确的字段类型到匹配数据库字段名,每一步都提供了实用的指导。

最近在用oracle数据库,在使用plsql中遇到的一些问题。今天再记录一下吧。

1、建表。目的是:被导入到数据的存储位置。

因为数据库中曾经有过相同表结构的表,所以直接使用SQL建表。

-- T_FULL_DEVICE表

CREATE TABLE "XXXX"."T_FULL_DEVICE" 
   (    "ID" VARCHAR2(32) NOT NULL ENABLE, 
    "CASEWHENEXISTS" VARCHAR2(32) NOT NULL ENABLE, 
    "OLD_ID" VARCHAR2(32), 
    "USE_COMPANY" VARCHAR2(50), 
    "RES_NAME" VARCHAR2(200), 
    "RES_CODE" VARCHAR2(100), 
    "DEV_TYPE" VARCHAR2(32), 
    "FACTORY" VARCHAR2(100), 
    "DEV_MODEL" VARCHAR2(100), 
    "AREA" VARCHAR2(100), 
    "STATION" VARCHAR2(100), 
    "ROOMNMEA" VARCHAR2(100), 
    "ADDRESS" VARCHAR2(200), 
    "PY_STATUS" VARCHAR2(32), 
    "CREATE_DATE" VARCHAR2(32), 
    "MODIFY_DATE" VARCHAR2(32), 
    "ASSET_ID" VARCHAR2(100), 
    "RES_ROOMID" VARCHAR2(100), 
    "RES_ROOMCODE" VARCHAR2(100)
   )


2、建好表后,开始导入数据。

2.1、点击,工具栏“工具”。

2.2、选择下拉列表“文本导入器”选项。

2.3、进入界面有2个选项卡,默认进入“来自文本文件的数据”选项卡。

2.3.1、点击“来自文本文件的数据”左上角的导入文件图标。

2.3.2、选择要导入的csv文件,点击open。

open后显示如下:

2.3.4、进入“到Oracle数据库”选项卡。选择“所有者”和“表”。所有者就是:你要导入到数据库名,表就是你刚刚在这个数据库下面创建的表。这两个选好之后,如果你的csv文件各个字段列名和数据库表的列名匹配,则符号->后面会自动匹配数据库库对应的字段名。如果不匹配,则需要自己手动匹配。手动匹配通过右侧的“字段”下拉列表框进行选择。注意为每个字段选择右侧的字段类型,如果字段类型不匹配,是不能导入的。这些都配置好后,点击左下角的“导入”即可。自此,我们的工作已经完成,就等着plsql自己去导入数据吧。下面会有进度条,显示当前已经导入了多少条数据。


--------------------- 

### 在 Oracle 19c 中通过 PL/SQL 导入 CSV 文件 为了在 Oracle 19c 数据库中使用 PL/SQL 将 CSV 文件中的数据导入到中,可以通过以下方式实现。这种方法主要依赖于 UTL_FILE 包来读取文件并将其内容插入到数据库中。 #### 步骤说明 ##### 1. 创目标 首先,在数据库中创一个用于存储 CSV 数据的目标。假设我们有一个名为 `EMPLOYEE` 的,其结构如下: ```sql CREATE TABLE EMPLOYEE ( ID NUMBER, NAME VARCHAR2(100), SALARY NUMBER, HIRE_DATE DATE ); ``` ##### 2. 编写 PL/SQL 程序 接下来,编写一个 PL/SQL 块来读取 CSV 文件并将每一行的数据插入到上述中。以下是完整的示例代码: ```plsql DECLARE -- 定义变量 v_file UTL_FILE.FILE_TYPE; v_line VARCHAR2(32767); -- 存储每行数据的最大长度 v_data_array DBMS_UTILITY.LNAME_ARRAY; -- 数组用于分割字符串 n PLS_INTEGER := 0; BEGIN -- 打开 CSV 文件(确保路径和权限设置正确) v_file := UTL_FILE.FOPEN('DATA_DIR', 'employees.csv', 'R'); LOOP BEGIN -- 逐行读取文件 UTL_FILE.GET_LINE(v_file, v_line); -- 使用正则达式或其他逻辑拆分 CSV 字段 DBMS_UTILITY.COMMA_TO_TABLE( list => REGEXP_REPLACE(v_line, '^"|"$|"",""', '"|""'), -- 处理双引号包裹的情况 tablen => n, tab => v_data_array ); -- 插入数据到目标 INSERT INTO EMPLOYEE (ID, NAME, SALARY, HIRE_DATE) VALUES ( TO_NUMBER(TRIM(BOTH '"' FROM v_data_array(1))), TRIM(BOTH '"' FROM v_data_array(2)), TO_NUMBER(TRIM(BOTH '"' FROM v_data_array(3))), TO_DATE(TRIM(BOTH '"' FROM v_data_array(4)), 'YYYY-MM-DD') ); EXCEPTION WHEN NO_DATA_FOUND THEN EXIT; -- 如果没有更多数据,则退出循环 END; END LOOP; -- 关闭文件 UTL_FILE.FCLOSE(v_file); COMMIT; EXCEPTION WHEN OTHERS THEN IF UTL_FILE.IS_OPEN(v_file) THEN UTL_FILE.FCLOSE(v_file); END IF; RAISE; END; / ``` #### 注意事项 - **目录对象配置**:在上面的代码中,`UTL_FILE.FOPEN` 函数的第一个参数 `'DATA_DIR'` 是一个预定义的目录对象名称。此对象需要由管理员提前创,并指向实际存放 CSV 文件的位置。例如: ```sql CREATE OR REPLACE DIRECTORY DATA_DIR AS '/path/to/csv/files'; GRANT READ, WRITE ON DIRECTORY DATA_DIR TO YOUR_USER_NAME; ``` - **CSV 格式兼容性**:如果 CSV 文件包含复杂的字段(如嵌套逗号或换行符),可能需要调整正则达式的逻辑以适配特定情况[^1]。 - **性能优化**:对于大规模数据集,议批量提交事务而不是每次插入都单独提交,这样可以显著提升性能[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值