楼主: 想学数据库

[精华] 如何纯文本文件上传到系统,并把里面的数据灌到数据库

[复制链接]
论坛徽章:
12
会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28ERP板块每日发贴之星
日期:2011-02-26 01:01:012011新春纪念徽章
日期:2011-02-18 11:43:33生肖徽章2007版:鸡
日期:2008-01-02 17:35:53ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章:猪
日期:2006-09-07 10:15:06生肖徽章:猴
日期:2006-09-06 21:20:15世界杯纪念徽章
日期:2006-07-20 13:19:20
31#
发表于 2005-10-24 14:17 | 只看该作者
Thanks

使用道具 举报

回复
招聘 : 数据分析/ETL
论坛徽章:
2
参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-06 15:19:012013年新春福章
日期:2013-02-25 14:51:24
32#
发表于 2005-10-26 09:02 | 只看该作者
这个可以用jsp上传文本件,然后利用9i的external table来完成数据库的和文本文件的连接。你可以像使用表一样地使用文件

使用道具 举报

回复
招聘 : ERP实施
论坛徽章:
0
33#
发表于 2005-10-27 16:20 | 只看该作者

贡献点

CREATE OR REPLACE PROCEDURE xxosa_retrieve_fee_lob(errbuf             OUT  VARCHAR2
                                                 ,retcode           OUT  NUMBER
                                                 ,p_user_id         IN   NUMBER
                                                 ,p_file_id         IN   NUMBER
                                                 )
IS
    temp_blob       BLOB;
    data_buffer     RAW(32767);
    v_file_name     VARCHAR2(30);
    v_data          VARCHAR2(32000);
    amount          BINARY_INTEGER;
    amount2         BINARY_INTEGER;
    amount1         BINARY_INTEGER;
    error_number    NUMBER;
    error_message   VARCHAR2 (100);
    length_count    INTEGER;
    TYPE column_type IS TABLE OF VARCHAR2(500) INDEX BY BINARY_INTEGER;
    v_column        column_type;
    -- 预计的行数一百万行
    v_count         NUMBER := 1000000;
BEGIN
    SELECT file_data
           ,substr(file_name,instr(file_name,'/')+1,length(file_name))
    INTO   temp_blob
           ,v_file_name
    FROM   xxosa_lobs
    WHERE  file_id = p_file_id
    ;
    FOR j IN 1..6
    LOOP
        v_column(j) := ' ';
    END LOOP;
    length_count := dbms_lob.getlength (temp_blob);
    fnd_file.put_line (1,'Internal LOB size is:  ' || length_count);
    amount1 := 0;
    FOR i IN 1..v_count LOOP
        amount := dbms_lob.instr(temp_blob,utl_raw.cast_to_raw(','),1,6*i);
        IF amount = 0 THEN
                   EXIT;
                END IF;
        fnd_file.put_line (1,'Internal LOB size is:  ' || amount||':'||amount1);
        IF i = 1 THEN
            amount2 := amount - amount1 + 1;
        ELSE
            amount2 := amount - amount1;
        END IF;
        dbms_lob.read(temp_blob,amount2,amount1 + 1,data_buffer);
        v_data := trim(utl_raw.cast_to_varchar2(data_buffer));
        -- 屏蔽回车 换行 空格字符
        v_data := replace(replace(replace(v_data,chr(10),''),chr(13),''),' ','');
        FOR k IN 1..6 LOOP
            IF k = 1 THEN
                v_column(k) := substr(v_data,0,instr(v_data,',',k)-1);
            ELSE
                v_column(k) := substr(v_data,instr(v_data,',',1,k-1)+1,instr(v_data,',',1,k)-instr(v_data,',',1,k-1)-1);
            END IF;
        END LOOP;
        IF i <> 1 THEN
            INSERT INTO xxosa_outer_fee_data_tmp(
                line_id
                ,line_no
                ,sold_from
                ,office
                ,time
                ,fee_type
                ,fee_amount
                ,attribute4
                ,file_id
                ,flag
                ,in_time
                ,last_update_date
                ,last_updated_by
                ,creation_date
                ,created_by
                ,last_update_login
            ) VALUES (
                xxosa_outer_fee_data_tmp_s.nextval
                ,v_column(1)
                ,v_column(2)
                ,v_column(3)
                ,v_column(4)
                ,v_column(5)
                ,v_column(6)
                ,v_file_name
                ,p_file_id
                ,0
                ,to_number(to_char(sysdate,'YYYYMMDD'))
                ,sysdate
                ,p_user_id
                ,sysdate
                ,p_user_id
                ,p_user_id
            );
            
            COMMIT;
        END IF;
        amount1 := amount;
        fnd_file.put_line (1,'data_buffer:  ' || v_data);
    END LOOP;
    COMMIT;
    fnd_file.put_line (1,'Exit the loop');
    fnd_file.put_line (1,'Close the file');
EXCEPTION
    WHEN OTHERS
    THEN
        error_number := SQLCODE;
        error_message := SUBSTR (SQLERRM, 1, 100);
        fnd_file.put_line (1,'Error #: ' || error_number);
        fnd_file.put_line (1,'Error Message: ' || error_message);
END;
/

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表