我现在需要把一个txt文件数据导入到oracle的一张表中去 请问怎么做;
如:
文本文件里面是
张三,22
李四,25
王五,33
我想把这些信息导入到表里面
表结构:
create table test(
name varchar2(20),
age int
);不用外部命令不用工具怎么弄!!!!!谢谢!

解决方案 »

  1.   

    sqlldr也不能用吗?你的意思是使用pl/sql写procedure去读文本?并写到DB中去?
      

  2.   

    sqlldr, 或者pl/sql developer提供有这个功能
      

  3.   

    如果愿意用SI Object Browser的话,可以先把txt文件用excel打开,然后从excel里面拷贝之后一次性复制到表里面
      

  4.   

    informix有load ,unload,
    oracle还不知道
      

  5.   

    用外部表
    1,'C:\Documents and Settings\Administrator'下面的1.txt内容
    1202,张三 
    1202,张四 
    1201,王八 
    1202,秦浩 
    1203,王浩 
    1202,武平 
    1203,廖明 
    1203,田齐 
    1203,孟子
    2 建directory
    CREATE OR REPLACE DIRECTORY "DATA_DIR" AS 'C:\Documents and Settings\Administrator'
    3 建外部表
    CREATE TABLE "SCOTT"."EXT_T"
     (    "TYPE" NUMBER,
          "NAME" VARCHAR2(10)
     )
     ORGANIZATION EXTERNAL
      ( TYPE ORACLE_LOADER
        DEFAULT DIRECTORY "DATA_DIR"
        ACCESS PARAMETERS
        ( fields terminated by ','    )
        LOCATION
         ( '1.txt'
         )
      )
    4 是用外部表
    SQL> select * from ext_t;      TYPE NAME
    ---------- ----------
          1202 张三
          1202 张四
          1201 王八
          1202 秦浩
          1203 王浩
          1202 武平
          1203 廖明
          1203 田齐
          1203 孟子已选择9行。SQL> select * from t;未选定行SQL> desc t;
     名称                                                  是否为空? 类型
     ----------------------------------------------------- -------- --------------- TYPE                                                           NUMBER
     NAME                                                           VARCHAR2(10)SQL> insert into t select * from ext_t;已创建9行。SQL> select * from t;      TYPE NAME
    ---------- ----------
          1202 张三
          1202 张四
          1201 王八
          1202 秦浩
          1203 王浩
          1202 武平
          1203 廖明
          1203 田齐
          1203 孟子已选择9行。
      

  6.   

    用外部表
    1,'C:\Documents and Settings\Administrator'下面的1.txt内容
    1202,张三 
    1202,张四 
    1201,王八 
    1202,秦浩 
    1203,王浩 
    1202,武平 
    1203,廖明 
    1203,田齐 
    1203,孟子
    2 建directory
    CREATE OR REPLACE DIRECTORY "DATA_DIR" AS 'C:\Documents and Settings\Administrator'
    3 建外部表
    CREATE TABLE "SCOTT"."EXT_T"
     (    "TYPE" NUMBER,
          "NAME" VARCHAR2(10)
     )
     ORGANIZATION EXTERNAL
      ( TYPE ORACLE_LOADER
        DEFAULT DIRECTORY "DATA_DIR"
        ACCESS PARAMETERS
        ( fields terminated by ','    )
        LOCATION
         ( '1.txt'
         )
      )
    4 是用外部表
    SQL> select * from ext_t;      TYPE NAME
    ---------- ----------
          1202 张三
          1202 张四
          1201 王八
          1202 秦浩
          1203 王浩
          1202 武平
          1203 廖明
          1203 田齐
          1203 孟子已选择9行。SQL> select * from t;未选定行SQL> desc t;
     名称                                                  是否为空? 类型
     ----------------------------------------------------- -------- --------------- TYPE                                                           NUMBER
     NAME                                                           VARCHAR2(10)SQL> insert into t select * from ext_t;已创建9行。SQL> select * from t;      TYPE NAME
    ---------- ----------
          1202 张三
          1202 张四
          1201 王八
          1202 秦浩
          1203 王浩
          1202 武平
          1203 廖明
          1203 田齐
          1203 孟子已选择9行。
      

  7.   

    可以借助第三方工具来完也,也可以使用oracle自带的UTL_FILE包实现对文件的I/O操作来完成,看下面的例子:
    示例:
    C:\logs  目录下有文件db_alert.log
    里面有内容:'张三,22';
    执行过程后:v_temp值为'张三,22';
    剩下的楼主可以参考完成.
    对于UTL_FILE包的使用可以参考下面这个文章:
    http://topic.csdn.net/t/20051212/17/4454609.htmlCREATE OR REPLACE PROCEDURE p_test AS
      i               NUMBER;
      file_handle     utl_file.file_type;
      write_file_name VARCHAR2(50);
      v_temp          VARCHAR2(2048);
    BEGIN
      write_file_name := 'db_alert.log';
      file_handle     := utl_file.fopen('c:\logs', write_file_name, 'r');
      --注意这里的打开文件的方式是'r'
      IF utl_file.is_open(file_handle) THEN
        utl_file.get_line(file_handle, v_temp);
      END IF;
      utl_file.fclose(file_handle);
    EXCEPTION
      WHEN OTHERS THEN
        BEGIN
          IF utl_file.is_open(file_handle) THEN
            utl_file.fclose(file_handle);
          END IF;
        EXCEPTION
          WHEN OTHERS THEN
            NULL;
        END;
    END;