是否可以将平面文件的内容读取到pl / sql表(而不是常规表)中?

时间:2019-02-20 12:31:05

标签: oracle

我正在使用Oracle 12.2,并且想要读取txt / xls / etc-File(平面文件)。是否可以将文件内容读入pl / sql表(不是常规表)? 挑战在于,不要修改数据库,尤其是不要创建任何数据库对象。同时,我必须使用pl / sql中的平面文件的内容。这就是为什么我要读取平面文件并仅将其“作为表存储在内存中”的原因。 我正在使用sql * plus和sql developer。

我想做的是关于数据迁移的事情:从给定的数据库中读取数据并将其写入csv文件中,以便将这些文件导入新软件中。在执行此操作时,必须对某些数据进行“转换”(映射):我从旧软件中读取了一个值,并将其转换为新软件可以读取的值。这些映射文件是我正在谈论的平面文件。我(尚不存在)的plsql或sql代码应读取旧值,打开平面文件并获取具有旧值和新值的记录,然后使用新值并将其与其他数据一起存储在文件中。

1 个答案:

答案 0 :(得分:0)

类似的方法可能会有所帮助,但是需要手动处理。

declare
  f UTL_FILE.FILE_TYPE;
  ldir varchar2(100) := 'DATA_PUMP_DIR';
  lfile varchar2(100) := 'writefile.sql';
  vtable m_code_tabletype := m_code_tabletype();
BEGIN
f := UTL_FILE.FOPEN(ldir,lfile,'R');
  IF UTL_FILE.IS_OPEN(f) THEN
    LOOP
      BEGIN
        UTL_FILE.GET_LINE(f,lfile);
        IF lfile IS NULL THEN
          EXIT;
        END IF;
         --do parsing
         -- col1, col2, ...
         vtable.extend;
         vtable(vtable.count) := m_code_object(col1, col2, ...);
      END;
    END LOOP;

  COMMIT;
  END IF;
END;