`
单眼皮小猪
  • 浏览: 122765 次
  • 性别: 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

    在 txtToDb 方法中,我们首先链接 Oracle 数据库,然后读取 TXT 文件中的数据,并将其导入 Oracle 数据库。最后,我们关闭数据库连接和读取器。 程序优点: 1. 高效:该程序可以快速将大量 TXT 文件中的数据导入 ...

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

    用户可以通过这个工具方便地将图片存入Oracle数据库,也可以读取已存储的图片。 6. **优缺点**: - **CLOB**:优点是跨平台兼容性好,因为Base64编码是标准的文本格式;缺点是占用的空间比原始二进制数据大,且...

    将图片存入数据库,并从数据库中读取

    当我们谈论“将图片存入数据库,并从数据库中读取”时,我们实际上是在讨论一种数据存储策略,这种策略允许我们将图像文件作为二进制数据存储在数据库中,并能够按需检索出来。这种做法有其优点,例如方便数据集成和...

    java解析emoji表情存入oracle,并正常使用

    每个emoji由两个UTF-16编码组成,可以使用Java的`Character.toChars()`方法将其转换为字节数组,然后存入数据库的BLOB或CLOB字段。 在给定的文件列表中,`emoji-java-4.0.0.jar`是一个用于处理emoji的Java库,它...

    ORACLE 数据库入门视频

    Oracle数据库是全球广泛使用的...Oracle数据库的学习是一个深度和广度兼具的过程,理解这些基础知识是成为一名合格的Oracle数据库管理员的第一步。随着技能的提升,还将涉及性能优化、安全性、备份与恢复等多个领域。

    利用Java程序实现Oracle数据库中大对象的存取.pdf

    程序执行功能的简单说明:在客户端的浏览器界面上输入一个客户端的文件名(本文以pdf类型文件为例),将该文件的全部内容做为一个大对象的数据存储在服务器端的Oracle数据库中。任何一个客户端都可以通过浏览器再次...

    ORACLE-数据库入门.ppt

    当用户执行SQL语句时,Oracle会进行一系列步骤:解析SQL,将信息存入共享池,从数据文件读取数据块到缓冲区,执行操作并可能记录在重做日志缓冲区,最后返回结果给用户。值得注意的是,SQL语句在Oracle中是区分大小...

    java 读取txt数据并保存到数据库中源代码

    java 读取txt文本文件中的数据并保存到数据库中源代码,假设txt已有格式,并以","分隔。其中的sql包需要自己去微软官网下载。

    ORACLE数据库入门.pdf

    数据文件存储数据,重做日志文件记录所有对数据库的更改,控制文件用于跟踪数据库的状态和结构,参数文件则包含了数据库的配置信息。 - **数据文件**(*.dbf)存储表空间的数据,是数据库的基础。 - **重做日志...

    图片存入数据库 图片 数据库

    在IT领域,存储图像等非结构化数据在数据库中是一项常见的需求。本示例展示了如何使用JSP(JavaServer Pages)将图片上传至Oracle数据库,并进行显示。以下是对这一过程的详细解释: 首先,我们需要在数据库中创建...

    从oracle数据库中存取图片

    从Oracle数据库中读取图片的过程与保存过程类似,但主要涉及以下步骤: 1. **建立数据库连接**:与上文相同,使用`DriverManager.getConnection()`方法建立与Oracle数据库的连接。 2. **执行查询语句**:通过`...

    C#将word文件存入数据库与读取(Web版)

    "C#将word文件存入数据库与读取(Web版)"这个主题涵盖了如何在C#编程语言环境下,利用Web应用程序来操作Microsoft Word文档,并将其存储到数据库中,以便后续能够方便地进行读取和下载。以下是对这个主题的详细讲解。...

    怎样用VBA将EXCEL中的图片存入Oracle数据库(利用临时文件方式)

    标题“怎样用VBA将EXCEL中的图片存入Oracle数据库(利用临时文件方式)”涉及到的知识点主要包括: 1. **VBA(Visual Basic for Applications)编程**:VBA是Microsoft Office套件中的一种内置编程语言,允许用户...

    UPDATE 把文件保存到数据库中

    这个过程涉及到文件操作、数据库交互以及数据存储格式的转换。下面将详细介绍如何在PB9.0中实现“把文件保存到数据库中”。 1. **文件操作**: - 首先,你需要使用PB的内置函数或控件来读取文件。例如,可以使用`...

    spark解析csv文件,存入数据库

    在这部分文件内容中,我们首先看到了对Spark解析CSV文件并存入数据库的一个简单介绍。接下来,会逐步展开几个重要知识点,包括Spark框架的基础、如何使用Spark读取和解析CSV文件、数据处理的相关操作以及如何将处理...

    经典ORACLE 数据库学习(PPT)精简通俗易懂

    这篇PPT主要涵盖了Oracle数据库的基础知识,包括其体系结构、内存结构、实例、连接、事务、后台进程以及SQL语句的执行过程。以下是这些知识点的详细说明: 1. **Oracle体系结构**: - **物理结构**:Oracle数据库...

    Oracle照片的读取写入

    在PL/SQL中,可以使用`UTL_FILE`包读取文件,然后用`DBMS_LOB`包的`BULK COLLECT INTO`和`INSERT`语句将数据存入数据库。 ```plsql DECLARE file_handle UTL_FILE.FILE_TYPE; lob_loc BLOB; buffer RAW(32767)...

    用JSP实现XML文件到Oracle数据库的导入和导出.pdf

    - **数据导入**:从XML文件中读取数据,使用JDOM解析XML文件,然后利用Hibernate将解析得到的数据插入到Oracle数据库对应的表中。 - **数据导出**:查询Oracle数据库中的数据,使用JDOM生成XML文档,最终输出为XML...

    PB-数据库保存图片并在Datawindow中显示

    这些过程或函数可以封装复杂的逻辑,比如从文件系统中读取图片,将其转换为二进制数据,然后存入数据库;或者从数据库中取出图片数据,写入文件系统。 7. **显示DataWindow中的图片**:在DataWindow中显示图片,...

    oracle存储过程写法

    根据提供的Oracle存储过程示例,我们可以详细解析其中的关键知识点,包括存储过程的创建、游标的使用、临时表的创建及数据处理等。 ### 存储过程的创建与使用 存储过程是在数据库中编写的SQL代码块,它可以接受...

Global site tag (gtag.js) - Google Analytics