`
单眼皮小猪
  • 浏览: 121663 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

oracle存储过程读取文件--按照自定格式存入数据库

阅读更多
感谢我的老师【云淡风轻】的帮助
别的不说,直接上代码:
CREATE OR REPLACE PROCEDURE SZ_READFILEDAT(V_FILEPATH VARCHAR2,--文件路径
                                      V_FILENAME VARCHAR2,--文件名称
                                      V_ROWS     OUT NUMBER)--返回处理记录数

AUTHID CURRENT_USER AS
  V_FILE_HANDLE UTL_FILE.FILE_TYPE;
  V_SQL         VARCHAR2(2000);

  IS_EXISTS NUMBER(10);
  MAX_ID    NUMBER(10);
  COL1      VARCHAR2(1000);
 type c_cursor       IS REF CURSOR;
 c1 c_cursor;
 --V_ROWS NUMBER(10);
BEGIN
  --文件路径和文件名
  --V_FILEPATH := '/HOME/ORACLE';
  --V_FILENAME := 'AAA.DAT';

  --建立ORACLE文件路径
  V_SQL := 'CREATE OR REPLACE DIRECTORY MYFILEDIR  AS ''' || V_FILEPATH || '''';
  EXECUTE IMMEDIATE V_SQL;

  --创建表
  SELECT COUNT(*) INTO IS_EXISTS  FROM USER_OBJECTS  WHERE OBJECT_TYPE = 'TABLE'  AND OBJECT_NAME = 'PSZ_TEMP_STB';
  IF IS_EXISTS = 0 THEN
    V_SQL := 'CREATE TABLE PSZ_TEMP_STB
              (
                ID       INTEGER NOT NULL,
                BSM      VARCHAR2(20),
                JCKA     VARCHAR2(40),
                JYDWBH   VARCHAR2(10),
                HZDWDM   VARCHAR2(10),
                HZDWSZDQ VARCHAR2(5),
                YSFSDM   VARCHAR2(1),
                MYFS     VARCHAR2(4),
                MZXS     VARCHAR2(3),
                QDG      VARCHAR2(3),
                CZG      VARCHAR2(3),
                XKZBH    VARCHAR2(20),
                BAH      VARCHAR2(12),
                MZ       INTEGER,
                JGRQ     VARCHAR2(8),
                SPBH     VARCHAR2(8),
                FJBH     VARCHAR2(8),
                DYSL     INTEGER,
                DYJLDW   VARCHAR2(2),
                DRSL     INTEGER,
                DRJLDW   VARCHAR2(2),
                RMB      INTEGER,
                MY       INTEGER,
                MZFS     VARCHAR2(1),
                SZSK     INTEGER,
                SZGS     INTEGER,
                JMS      INTEGER,
                JMGS     INTEGER,
                KBX      VARCHAR2(6)
              )';
    EXECUTE IMMEDIATE V_SQL;
  END IF;

  --创建序列,序列最小值为PSZ_TEMP_STB表中是最大ID+1
  open c1 for 'select nvl(max(id),0)+1 from PSZ_TEMP_STB';
  fetch c1 into MAX_ID;
  close c1;
  V_SQL := 'DROP SEQUENCE SEQ_PSZ_TEMP_STB'; 
  begin
        EXECUTE IMMEDIATE V_SQL;
  exception when others then
            null;
  end;
  V_SQL := ' create  sequence SEQ_PSZ_TEMP_STB
                minvalue '||MAX_ID||'
                maxvalue 99999999
                start with '||MAX_ID||'
                increment by 1
                cache 20'; 
  EXECUTE IMMEDIATE V_SQL;
 

  V_FILE_HANDLE := UTL_FILE.FOPEN('MYFILEDIR', V_FILENAME, 'R');
  V_ROWS        := 0; --处理记录数
  LOOP
    BEGIN
      --将文件信息读取到COL1中,每次读取一行
      UTL_FILE.GET_LINE(V_FILE_HANDLE, COL1);
    
      --取序列值     
      open c1 for 'select SEQ_PSZ_TEMP_STB.nextval from dual';
      fetch c1 into MAX_ID;
      close c1;
      --插入数据
      
      execute immediate 'INSERT INTO PSZ_TEMP_STB
        (ID,
         BSM,
         JCKA,
         JYDWBH,
         HZDWDM,
         HZDWSZDQ,
         YSFSDM,
         MYFS,
         MZXS,
         QDG,
         CZG,
         XKZBH,
         BAH,
         MZ,
         JGRQ,
         SPBH,
         FJBH,
         DYSL,
         DYJLDW,
         DRSL,
         DRJLDW,
         RMB,
         MY,
         MZFS,
         SZSK,
         SZGS,
         JMS,
         JMGS,
         KBX)
      VALUES
        (:1,
         :2,
         :3,
         :4,
         :5,
         :6,
         :7,
         :8,
         :9,
         :10,
         :11,
         :12,
         :13,
         :14,
         :15,
         :16,
         :17,
         :18,
         :19,
         :20,
         :21,
         :22,
         :23,
         :24,
         :25,
         :26,
         :27,
         :28,
         :29
         )'
      using MAX_ID,
         SUBSTR(COL1, 1, 20),
         SUBSTR(COL1, 21, 4),
         SUBSTR(COL1, 25, 10),
         SUBSTR(COL1, 35, 10),
         SUBSTR(COL1, 45, 5),
         SUBSTR(COL1, 50, 1),
         SUBSTR(COL1, 51, 4),
         SUBSTR(COL1, 55, 3),
         SUBSTR(COL1, 58, 3),
         SUBSTR(COL1, 61, 3),
         SUBSTR(COL1, 64, 20),
         SUBSTR(COL1, 84, 12),
         SUBSTR(COL1, 96, 11),
         SUBSTR(COL1, 107, 8),
         SUBSTR(COL1, 115, 8),
         SUBSTR(COL1, 123, 8),
         SUBSTR(COL1, 131, 11),
         SUBSTR(COL1, 142, 2),
         SUBSTR(COL1, 144, 11),
         SUBSTR(COL1, 155, 2),
         SUBSTR(COL1, 157, 11),
         SUBSTR(COL1, 168, 11),
         SUBSTR(COL1, 179, 1),
         SUBSTR(COL1, 180, 11),
         SUBSTR(COL1, 191, 11),
         SUBSTR(COL1, 202, 11),
         SUBSTR(COL1, 203, 11),
         SUBSTR(COL1, 224, 6);  
      V_ROWS := V_ROWS + 1;
    
      --每一万条提交一次
      IF MOD(V_ROWS, 10000) = 0 THEN
        COMMIT;
      END IF;
    
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        EXIT;
      WHEN OTHERS THEN
        NULL;
    END;
  END LOOP;
  COMMIT;
  --关闭
  UTL_FILE.FCLOSE(V_FILE_HANDLE);
  --dbms_output.put_line(V_ROWS); 
 

END SZ_READFILEDAT;

调用的代码如下:

无输出参数时:
exec pro(v1,v2);

有输出参数时:
DECLARE
 V_ROWS NUMBER(10);
   BEGIN
    readfile1(v_filepath =>'C:/TEMPCLF',
               v_filename =>'AAA.DAT',
               v_rows =>v_rows);
  END;
分享到:
评论

相关推荐

    用java编程将txt文件数据导入oracle

    工作中有很多数据以txt方式存储,需要导入oracle数据库处理(方便进行计算、统计),因文件较多,不便于手工处理,所以编写此程序以便进行数据导入。已经测试过,可以将数据导入oracle。

    高中信息技术-数据库基础.pptx

    它可以让用户方便的实现大量数据信息的存入,读取,删除,更改等操作。 常见的数据库管理系统有:Access、MSSQL、DB2、Oracle、MySql等等 高中信息技术-数据库基础全文共14页,当前为第4页。 走进数据库 我们可以看...

    图片存入Oracle中,用clob和blob两种方式

    简单写的一个小工具,把图片存入oracle中,按clob和blob两种方式存储,并读取图片

    C#连接数据库源码下载

     实例263 连接Oracle数据库 368  9.4 数据库结构的读取与修改 369  实例264 读取SQL Server数据库结构 369  实例265 修改SQL Server数据库结构 372  9.5 数据录入 374  实例266 利用数据绑定...

    深入浅析mybatis oracle BLOB类型字段保存与读取

    BLOB通常用来保存图片、文件等二进制类型的数据。 二、使用mybatis操作blob  1、表结构如下: create table BLOB_FIELD ( ID VARCHAR2(64 BYTE) not null, TAB_NAME VARCHAR2(64 BYTE) not null,

    C#程序开发范例宝典9

    366 9.3 连接其他数据库 367 实例262 连接Excel 367 实例263 连接Oracle数据库 368 9.4 数据库结构的读取与修改 369 实例264 读取SQL Server数据库结构 369 实例265 修改SQL Server...

    hibernate保存图片

    二是数据库中只存储图片的在服务器上的路径信息 ,图片存放在分门别类的文件中,使用的时候从数据库读取路径信息到页面img元素即可.在此不讨论两种方案的优劣,我只是写了个hibernate的例子来实现第一种策略.例子...

    利用KEPSERVER6 实现写入SQLSERVER.docx

    利用KEPSERVER6 实现写入SQLSERVER.docx

    C#程序开发范例宝典(第2版).part13

    实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 ...

    C#程序开发范例宝典(第2版).part08

    实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 ...

    C#程序开发范例宝典(第2版).part02

    实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 ...

    C#.net_经典编程例子400个

    256 实例175 清空回收站 257 6.2 查找文件 258 实例176 搜索文件 259 实例177 检查文件是否存在 260 实例178 提取指定文件夹目录 261 6.3 修改文件 261 实例179 更改文件名称 ...

    C#程序开发范例宝典(第2版).part12

    实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件添加自定义滚动条 68 实例059 在RichTextBox控件中实现关键字描红 69 实例060 在RichTextBox控件中实现项目编号功能 71 实例061 ...

Global site tag (gtag.js) - Google Analytics