随笔 - 571  文章 - 4  评论 - 253  阅读 - 72万

PLSQL_PLSQL读和写CSV文件方式(案例)

2012-01-06 Created By BaoXinjin

一、摘要


读写CSV的方式

1. 写CSV

Step1. 创建测试目录

Step2. 写CSV文件

Step3. 查看CSV文件

2. 读CSV

Step1. 创建测试表

Step2. 读CSV文件

Step3. 查看表

 

二、写CSV文件


Step1. 创建测试目录

--创建测试目录
CREATE OR REPLACE DIRECTORY bxjcsv AS '/home/oracle/bxjcsv'; 

--目录权限分配
GRANT READ, WRITE ON DIRECTORY bxjcsv TO public;

Step2. 写CSV文件

复制代码
DECLARE
   f_emp     UTL_FILE.FILE_TYPE;

   CURSOR cur_emp
   IS
      SELECT   first_name,last_name,email,phone_number,salary
        FROM   HR.EMPLOYEES
WHERE ROWNUM<=10; rec_emp cur_emp
%ROWTYPE; BEGIN f_emp := UTL_FILE.FOPEN ('BXJCSV','EMP_DEPT.CSV','W',32767); FOR rec_emp IN cur_emp LOOP UTL_FILE.PUT (f_emp, rec_emp.first_name); UTL_FILE.PUT (f_emp, ',' || rec_emp.last_name); UTL_FILE.PUT (f_emp, ',' || rec_emp.email); UTL_FILE.PUT (f_emp, ',' || rec_emp.phone_number); UTL_FILE.PUT (f_emp, ',' || rec_emp.salary); UTL_FILE.NEW_LINE (f_emp); END LOOP; UTL_FILE.FCLOSE (f_emp); END;
复制代码

Step3. 查看CSV文件

 

三、读CSV文件


 Step1. 创建测试表

CREATE TABLE hr.bxj_employees (
first_name VARCHAR2(50),
last_name VARCHAR2(50),
email VARCHAR2(100),
phone_number VARCHAR2(50),
salary NUMBER
)

Step2. 读CSV文件

复制代码
DECLARE
   f_emp            UTL_FILE.FILE_TYPE;
   v_line           VARCHAR2 (1000);
   v_first_name     hr.bxj_employees.first_name%TYPE;
   v_last_name      hr.bxj_employees.last_name%TYPE;
   v_email          hr.bxj_employees.email%TYPE;
   v_phone_number   hr.bxj_employees.phone_number%TYPE;
   v_salary         hr.bxj_employees.salary%TYPE;
BEGIN
   f_emp := UTL_FILE.FOPEN ('BXJCSV', 'EMP_DEPT.CSV', 'R');

   IF UTL_FILE.IS_OPEN (f_emp)
   THEN
      LOOP
         BEGIN
            UTL_FILE.GET_LINE (f_emp, v_line, 1000);

            IF v_line IS NULL
            THEN
               EXIT;
            END IF;

            v_first_name := REGEXP_SUBSTR (v_line,'[^,]+',1,1);
            v_last_name := REGEXP_SUBSTR (v_line,'[^,]+',1,2);
            v_email := REGEXP_SUBSTR (v_line,'[^,]+',1,3);
            v_phone_number := REGEXP_SUBSTR (v_line,'[^,]+',1,4);            
            v_salary := REGEXP_SUBSTR (v_line,'[^,]+',1,5);

            INSERT INTO hr.bxj_employees
              VALUES   (v_first_name,v_last_name,v_email,v_phone_number,v_salary);

            COMMIT;
         EXCEPTION WHEN NO_DATA_FOUND THEN
           EXIT;
         END;
      END LOOP;
   END IF;

   UTL_FILE.FCLOSE (f_emp);
END;
复制代码

Step3. 查看表

 

Thanks and Regards

posted on   东方瀚海  阅读(1913)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

点击右上角即可分享
微信分享提示