请教,存储过程中如何获取后台文件内容到数据库的一样表中(是同一台主机)?

解决方案 »

  1.   

    http://club.baby.sohu.com/r-mom_daugh-23846431-0-14-900.html
    Oracle 9i 的一项新特性就是 External Table,它就象通常的数据库表一样,拥有字段和数据类型约束,并且可以查询,但是表中的数据却不存储在数据库中,而是在与数据库相关联的普通外部文件里。当你查询 External Table 时,Oracle 将解析该文件并返回符合条件的数据,就象该数据存储在数据库表中一样。需要注意的是,你可以在查询语句中将 External Table 与数据库中其他表进行连接(Join),但是不能给 External Table 加上索引,并且不能插入/更新/删除数据,毕竟它不是真正的数据库表。另外,如果与数据库相关联的外部文件被改变或者被删除,这会影响到 External Table 返回查询结果,所以在变动前要先跟数据库打招呼。这种方法为导入数据打开了新的一扇门。你可以很容易的将外部文件与数据库相关联,并且在数据库中创建对应的 External Table,然后就可以立即查询数据,就象外部数据已经导入到数据库表中一样。唯一的不足需要明确,数据并未真正导入到数据库中,当外部文件被删除或覆盖时,数据库将不能访问 External Table 里的数据,而且索引没有被创建,访问数据速度将有所缓慢。创建 CALLS_EXTERNAL(External Table表)如下,使之与外部数据文件关联:CREATE TABLE calls_external 
    (call_id NUMBER,
    call_date DATE,
    emp_id NUMBER,
    call_type VARCHAR2(12),
    details VARCHAR2(25))
    ORGANIZATION EXTERNAL
    ( TYPE oracle_loader
    DEFAULT DIRECTORY extract_files_dir
    ACCESS PARAMETERS
    (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY ’,’
    MISSING FIELD VALUES ARE NULL
    (
    call_id, call_date CHAR DATE_FORMAT DATE MASK
    "yyyy-mm-dd:hh24:mi:ss",
    emp_id, call_type, details
    )
    )
    LOCATION (’calls.dat’)
    ); 然后将 External Table 与真正被使用的表 CALLS 关联同步,删除 CALLS 表并重建它:CREATE TABLE calls
    (
    call_id NUMBER NOT NULL,
    call_date DATE NOT NULL,
    emp_id NUMBER NOT NULL,
    call_type VARCHAR2(12) NOT NULL,
    details VARCHAR2(25)
    )
    TABLESPACE tbs1 NOLOGGING
    AS
    SELECT call_id, call_date, emp_id, call_type, details
    FROM calls_external;