文件数据导入

原创 2011年01月10日 22:24:00

CREATE OR REPLACE PACKAGE CUX_AMW_FILE_INTO IS

  /*==========================================================================+
  |             Copyright (c) 2009 Ares Huang                                 |
  |                   All rights reserved.                                    |
  +===========================================================================+
  |-- Author  : MIS HuangYunqiang                                             |
  |-- Created : 2009-05-14 10:08:22                                           |
  *****************************************************************************
  ****************************************************************************/
  PROCEDURE ME_OPT(P_FILE_ID IN NUMBER
                  ,P_ORG_ID  IN NUMBER);

  PROCEDURE NMCC_GZ(P_FILE_ID IN NUMBER
                   ,P_ORG_ID  IN NUMBER);

END CUX_AMW_FILE_INTO;
/
CREATE OR REPLACE PACKAGE BODY CUX_AMW_FILE_INTO IS

  /*==========================================================================+
  |             Copyright (c) 2009 Ares Huang                                 |
  |                   All rights reserved.                                    |
  +===========================================================================+
  |-- Author  : MIS HuangYunqiang                                             |
  |-- Created : 2009-05-14 10:08:22                                           |
  *****************************************************************************
  ****************************************************************************/
  PROCEDURE ME_OPT(P_FILE_ID IN NUMBER
                  ,P_ORG_ID  IN NUMBER) IS
    PRAGMA AUTONOMOUS_TRANSACTION;
    -- l_file_id NUMBER;
    ----------------------------
    --w_integer INTEGER;
    W_BLOB    BLOB;
    W_RAW     RAW(10);
    W_BUFF    VARCHAR2(30000);
    W_LINE    VARCHAR2(30000);
    W_LEN     INTEGER;
    EOFSW     BOOLEAN := FALSE;
    OFFSET    INTEGER;
    W_B_LEN   NUMBER := 0;
    W_NUM     NUMBER;
    W_SEQ     NUMBER := 0;
    V_LOOP    NUMBER := 0;
    V_TYPE    VARCHAR2(50);
    V_PD_NAME VARCHAR2(50);
    V_PD_SUB  VARCHAR2(50);
    V_RE      NUMBER;
    V_TMP     NUMBER;
    ----------------------------
    I       NUMBER;
    LINEBUF VARCHAR2(30000);
    TYPE COMMA_POS_TYPE IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;
    T_COMMA_POS COMMA_POS_TYPE;
    V_NO        VARCHAR2(22);
  BEGIN
    SELECT TO_CHAR(SYSDATE, 'YYYYMM') || LPAD(TO_CHAR(NVL(COUNT(DISTINCT IN_NO), 0) + 1), 4, '0')
      INTO V_NO
      FROM CUX.CUX_AMW_ME_OPT T
     WHERE T.CREATION_DATE >= TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM') || '-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
       AND T.CREATION_DATE < TO_DATE(TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'YYYY-MM') || '-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
    SELECT FILE_DATA INTO W_BLOB FROM FND_LOBS WHERE FILE_ID = P_FILE_ID;
    OFFSET := 1;
    V_LOOP := 0;
    LOOP
      EXIT WHEN EOFSW;
      W_SEQ   := W_SEQ + 1;
      W_RAW   := UTL_RAW.CAST_TO_RAW(CHR(10));
      W_NUM   := DBMS_LOB.INSTR(W_BLOB, W_RAW, OFFSET, 1);
      W_LEN   := W_NUM - W_B_LEN;
      W_B_LEN := W_NUM;
      IF W_NUM = 0 THEN
        W_LEN := 20000;
        EOFSW := TRUE;
      END IF;
      BEGIN
        DBMS_LOB.READ(W_BLOB, W_LEN, OFFSET, W_BUFF);
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          EXIT;
        WHEN OTHERS THEN
          RAISE;
      END;
      W_LINE := UTL_RAW.CAST_TO_VARCHAR2(W_BUFF);
      SELECT REPLACE(W_LINE, CHR(10), NULL) INTO W_LINE FROM DUAL;
      SELECT REPLACE(W_LINE, CHR(13), NULL) INTO W_LINE FROM DUAL;
      ------------------   
      LINEBUF := W_LINE;
      I       := 1;
      WHILE INSTR(LINEBUF, ',', 1, I) > 0 LOOP
        T_COMMA_POS(I) := INSTR(LINEBUF, ',', 1, I);
        I := I + 1;
      END LOOP;
      IF V_LOOP > 0 THEN
        BEGIN
          INSERT INTO CUX.CUX_AMW_ME_OPT
            (FILE_ID
            ,ORG_ID
            ,M_NO
            ,E_NO
            ,JOB_NO
            ,E_QTY
            ,M_QTY
            ,M_ITEM_NAME
            ,PXH
            --,E_ITEM_NAME
            ,LAST_UPDATE_DATE
            ,LAST_UPDATED_BY
            ,CREATION_DATE
            ,CREATED_BY
            ,IN_NO)
          VALUES
            (P_FILE_ID
            ,P_ORG_ID
            ,TRIM(SUBSTR(LINEBUF, 1, T_COMMA_POS(1) - 1)) --M NO
            ,TRIM(SUBSTR(LINEBUF, T_COMMA_POS(1) + 1, T_COMMA_POS(2) - T_COMMA_POS(1) - 1)) --E NO
            ,TRIM(SUBSTR(LINEBUF, T_COMMA_POS(2) + 1, T_COMMA_POS(3) - T_COMMA_POS(2) - 1)) --JOB NO
            ,TRIM(SUBSTR(LINEBUF, T_COMMA_POS(3) + 1, T_COMMA_POS(4) - T_COMMA_POS(3) - 1)) --E QTY
            ,TRIM(SUBSTR(LINEBUF, T_COMMA_POS(4) + 1, T_COMMA_POS(5) - T_COMMA_POS(4) - 1)) --M ITEM
            ,0 --M QTY
            ,TRIM(SUBSTR(LINEBUF, T_COMMA_POS(5) + 1)) -- PXH
            --,TRIM(SUBSTR(LINEBUF, T_COMMA_POS(5) + 1)) -- E ITEM
            ,SYSDATE
            ,APPS.FND_GLOBAL.USER_ID
            ,SYSDATE
            ,APPS.FND_GLOBAL.USER_ID
            ,V_NO);
        EXCEPTION
          WHEN OTHERS THEN
            FND_MESSAGE.SET_NAME('FND', 'SQL_PLSQL_ERROR');
            FND_MESSAGE.SET_TOKEN('ERRNO', -20000);
            FND_MESSAGE.SET_TOKEN('REASON', '导入失败,请确认数据 ' || LINEBUF || SUBSTR(LINEBUF, 1, T_COMMA_POS(1) - 1));
            FND_MESSAGE.SET_TOKEN('ROUTINE', 'CUX_AMW_FILE_INTO');
            ROLLBACK;
            APP_EXCEPTION.RAISE_EXCEPTION;
        END;
      END IF;
      OFFSET := OFFSET + W_LEN;
      V_LOOP := V_LOOP + 1;
    END LOOP;
    COMMIT;
  END;

  PROCEDURE NMCC_GZ(P_FILE_ID IN NUMBER
                   ,P_ORG_ID  IN NUMBER) IS
    PRAGMA AUTONOMOUS_TRANSACTION;
    -- l_file_id NUMBER;
    ----------------------------
    --w_integer INTEGER;
    W_BLOB    BLOB;
    W_RAW     RAW(10);
    W_BUFF    VARCHAR2(30000);
    W_LINE    VARCHAR2(30000);
    W_LEN     INTEGER;
    EOFSW     BOOLEAN := FALSE;
    OFFSET    INTEGER;
    W_B_LEN   NUMBER := 0;
    W_NUM     NUMBER;
    W_SEQ     NUMBER := 0;
    V_LOOP    NUMBER := 0;
    V_TYPE    VARCHAR2(50);
    V_PD_NAME VARCHAR2(50);
    V_PD_SUB  VARCHAR2(50);
    V_RE      NUMBER;
    V_TMP     NUMBER;
    ----------------------------
    I       NUMBER;
    LINEBUF VARCHAR2(30000);
    TYPE COMMA_POS_TYPE IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;
    T_COMMA_POS COMMA_POS_TYPE;
    V_NO        VARCHAR2(22);
  BEGIN
    DELETE MIS_WEIGHT.CUX_AMW_PD_INPUT WHERE PD_ID=-518 AND SID=-518;
    COMMIT;
    SELECT FILE_DATA INTO W_BLOB FROM FND_LOBS WHERE FILE_ID = P_FILE_ID;
    OFFSET := 1;
    V_LOOP := 0;
    LOOP
      EXIT WHEN EOFSW;
      W_SEQ   := W_SEQ + 1;
      W_RAW   := UTL_RAW.CAST_TO_RAW(CHR(10));
      W_NUM   := DBMS_LOB.INSTR(W_BLOB, W_RAW, OFFSET, 1);
      W_LEN   := W_NUM - W_B_LEN;
      W_B_LEN := W_NUM;
      IF W_NUM = 0 THEN
        W_LEN := 20000;
        EOFSW := TRUE;
      END IF;
      BEGIN
        DBMS_LOB.READ(W_BLOB, W_LEN, OFFSET, W_BUFF);
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          EXIT;
        WHEN OTHERS THEN
          RAISE;
      END;
      W_LINE := UTL_RAW.CAST_TO_VARCHAR2(W_BUFF);
      SELECT REPLACE(W_LINE, CHR(10), NULL) INTO W_LINE FROM DUAL;
      SELECT REPLACE(W_LINE, CHR(13), NULL) INTO W_LINE FROM DUAL;
      ------------------   
      LINEBUF := W_LINE;
      I       := 1;
      WHILE INSTR(LINEBUF, ',', 1, I) > 0 LOOP
        T_COMMA_POS(I) := INSTR(LINEBUF, ',', 1, I);
        I := I + 1;
      END LOOP;
      IF V_LOOP > 0 THEN
        BEGIN
          INSERT INTO MIS_WEIGHT.CUX_AMW_PD_INPUT
            (FILE_NAME
            ,PD_ID
            ,SID
            ,ITEM_NAME
            ,QTY_SYSTEM
            ,LAST_UPDATE_DATE
            ,LAST_UPDATED_BY
            ,CREATION_DATE
            ,CREATED_BY)
          VALUES
            (P_FILE_ID
            ,-518
            ,-518
            ,TRIM(SUBSTR(LINEBUF, 1, T_COMMA_POS(1) - 1)) --ITEM_NAME
            ,TRIM(SUBSTR(LINEBUF, T_COMMA_POS(1) + 1)) -- E ITEM
            ,SYSDATE
            ,APPS.FND_GLOBAL.USER_ID
            ,SYSDATE
            ,APPS.FND_GLOBAL.USER_ID);
        EXCEPTION
          WHEN OTHERS THEN
            FND_MESSAGE.SET_NAME('FND', 'SQL_PLSQL_ERROR');
            FND_MESSAGE.SET_TOKEN('ERRNO', -20000);
            FND_MESSAGE.SET_TOKEN('REASON', '导入失败,请确认数据 ' || LINEBUF || SUBSTR(LINEBUF, 1, T_COMMA_POS(1) - 1));
            FND_MESSAGE.SET_TOKEN('ROUTINE', 'CUX_AMW_FILE_INTO');
            ROLLBACK;
            APP_EXCEPTION.RAISE_EXCEPTION;
        END;
      END IF;
      OFFSET := OFFSET + W_LEN;
      V_LOOP := V_LOOP + 1;
    END LOOP;
    COMMIT;
  END;

END CUX_AMW_FILE_INTO;
/

oracle用impdp导入dmp数据泵文件

今天要导一个远程服务器的数据库到另外一台
  • u012142494
  • u012142494
  • 2014年10月10日 17:41
  • 3472

oracle.dmp文件导入以及数据泵(Data Dump)技术的介绍

关于要用imp命令导入,还是用impdp命令导入,你最好问问是传统的exp生成的dmp文件还是datapump生成的dmp文件,前者要用imp导入,后者用impdp导入。 二 、数据泵的特点与传统导...
  • haolyj98
  • haolyj98
  • 2016年10月25日 18:34
  • 723

Java实现文件批量导入导出实例(兼容xls,xlsx)

Java实现文件批量导入导出实例(兼容xls,xlsx) Java团长 2017-06-04 09:46 1、介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见...
  • u013322876
  • u013322876
  • 2017年06月04日 15:09
  • 4248

如何将数据库文件导入数据库中(SQL)

如何将  .sql 数据文件导入到SQL sever中? 我一开始是准备还原数据库的,结果出现了如下问题。因为它并不是备份文件,所以我们无法进行还原。 正确方式: 先打开SQL sever 20...
  • huanghi11
  • huanghi11
  • 2015年02月08日 20:19
  • 2868

批量处理BCP导入文件到数据库

上万个数据文件,高效的批量导入到数据库中
  • summonyyq
  • summonyyq
  • 2016年11月30日 12:42
  • 1294

mongodb导入json文件

mongodb导入json格式的文件的命令是mongoimport:在下面的这个例子中,使用mongoimport命令将文件contacts.json中的内容导入user数据库的contacts的数据...
  • robin_Xu_shuai
  • robin_Xu_shuai
  • 2017年10月26日 14:24
  • 1366

关于CSV文件导入到数据的方法以及遇到的问题和解决方案

最近做机器学习,在网上找到了一些数据要进行做实验。现在下来的是.CSV的文件,因为数据量比较大,故我需要把其导入到数据库中,我使用的数据库是Mysql5.7版本。   注意,Mysql为用户提供了专门...
  • ML_algorithmResearch
  • ML_algorithmResearch
  • 2016年01月27日 16:20
  • 4548

使用sqlyog导入数据表到MySql中

SQLyog功能介绍: 导入操作简单,不需要代码实现。 导入的数据源包括:Access、Excel、 CSV 和任何ODBC数据源。 可以保存为job脚本,通过dos命令执行该job脚本,对...
  • qq_30507287
  • qq_30507287
  • 2016年09月21日 22:39
  • 2258

oracle导入导出数据不完整问题

oracle数据的导入导出     以前导入导出出现数据不全的原因是因为当我们导入用户对象之后,把外键约束导入了,如果导入的数据没有按照主表----副表,那么如果先导入副表,副表就导入不...
  • kevin_LCC
  • kevin_LCC
  • 2014年11月12日 03:18
  • 4478

用java实现从文本文件批量导入数据至数据库

今天同事让我准备一个项目的测试数据,要向一个表中插入上千条记录,并且保证每条记录内容不同,如果用手工一条一条插入肯定是不可能,也不会有哪个SB去做这样的事,我最开始想到了用循环,但要求插入的记录内容不...
  • zhujiaxing666666
  • zhujiaxing666666
  • 2013年08月27日 10:55
  • 2927
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件数据导入
举报原因:
原因补充:

(最多只允许输入30个字)