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

简介: 2012-01-06 Created By BaoXinjin 一、摘要 读写CSV的方式 1. 写CSV Step1. 创建测试目录 Step2. 写CSV文件 Step3. 查看CSV文件 2.

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

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
Oracle 关系型数据库 Linux
[20171231]PLSQL使用绑定变量.txt
[20171231]PLSQL使用绑定变量.txt --//一些应用程序开发使用的绑定变量是:1,:2之列的语句,要调优这些语句必须写成如下: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING              ...
1176 0
|
SQL 关系型数据库 Perl
|
SQL 测试技术 索引
[20161029]无法窥视在PLSQL.txt
[20161029]无法窥视在PLSQL.txt --测试使用PL/SQL无法窥视绑定变量的情况: --例子链接:https://connormcdonald.wordpress.
674 0
|
监控 Oracle 关系型数据库
[20161002]impdp导入很慢.txt
[20161002]impdp导入很慢.txt --如果在导入前表以及对应索引已经存在,impdp导入(使用参数TABLE_EXISTS_ACTION=append)要维护索引,这样在导入时产生大量日志,比 --没有表存在的情况下慢很多,通过例子来说明.
1616 0
|
SQL 测试技术 Perl
[20160121]调式PL SQL.txt
[20160121]调式PL SQL.txt --一上班,看到一个帖子,里面提到一些技巧,才想起来许多东西视乎在忘记。 --链接 :https://connormcdonald.wordpress.com/2016/01/20/problematic-sql-plsql-is-your-friend/ --我自己重复测试看看。
790 0
|
SQL 数据库
手把手教你-----巧用Excel批量生成SQL语句,处理大量数据
<p><span style="font-size:18px">     <span style="font-family:KaiTi_GB2312">在做系统或者做项目的时候,经常会遇到这样的要求:用户给我们发过来一些数据,要求我们把这些数据导入到数</span></span></p> <p><span style="font-size:18px"><span style="font-
2792 0
|
SQL 关系型数据库 索引
PLSQL_批量压缩表Table Compress(案例)
2015-04-01 Created By BaoXinjian 一、摘要 表空间迁移并压缩案例    二、案例 Step1. 并发转移表空间 set timing on; alter session set parallel_degree_limit=192; alter ...
1010 0