Oracle自动从文件夹导入csv文件

Oracle自动从文件夹导入csv文件,oracle,csv,import,directory,Oracle,Csv,Import,Directory,我目前正在下载/更新 大约4000个csv文件包含 库存数据开/高/低/关/量 到单个目录文件夹 csv文件每天更新, 每天早上都会添加新数据, 有时,现有数据会被纠正。我使用的是CsiData的不公平优势,它纠正了以前不正确的数据 我想在文件夹中有csv文件 要自动导入到我的Oracle数据库, 在指定的时间 假设该文件夹可以通过oracle访问,并且您具有查看该文件夹的正确权限 下面是一个不需要测试的代码的粗略指南,请参见 您打算如何加载“已纠正”的数据?使用可能会更容易,但您必须为每个文件

我目前正在下载/更新 大约4000个csv文件包含 库存数据开/高/低/关/量 到单个目录文件夹

csv文件每天更新, 每天早上都会添加新数据, 有时,现有数据会被纠正。我使用的是CsiData的不公平优势,它纠正了以前不正确的数据

我想在文件夹中有csv文件 要自动导入到我的Oracle数据库,
在指定的时间

假设该文件夹可以通过oracle访问,并且您具有查看该文件夹的正确权限 下面是一个不需要测试的代码的粗略指南,请参见


您打算如何加载“已纠正”的数据?使用可能会更容易,但您必须为每个文件自动创建一个新表,这并不理想。不过,对sqlldr的脚本调用听起来是可行的,除了“纠正”问题。您需要根据您的操作系统编写shell或cmd脚本,该操作系统应该从文件夹中的所有文件创建一个文件,然后将其移动到具有固定文件名的Oracle目录。之后,正如Alex已经建议的那样,对新文件使用外部表。
CREATE TABLE files_to_process (file_name VARCHAR2(255));

CREATE OR REPLACE
AND COMPILE JAVA SOURCE NAMED "DirectoryList"
AS
import java.io.*;
import java.sql.*;

public class DirectoryList
{
public static void ListAllFiles(String directory)
                     throws SQLException
    {
        File path = new File( directory );
        String[] list = path.list();
        String element;

        for(int i = 0; i < list.length; i++)
        {
            element = list[i];
            sql 
            { 
                INSERT INTO Files_to_process (FILENAME) VALUES (:element) 
            };
        }
    }

}
/


CREATE OR REPLACE  PROCEDURE get_files_to_process( p_directory in varchar2 )
  AS LANGUAGE JAVA
  NAME 'DirectoryList.ListAllFiles( java.lang.String )';
/

BEGIN
    delete Files_to_process;

    get_files_to_process( '\mnt\your_folder' );

    for rec in (select file_name from Files_to_process)
    LOOP
        process_file(file_name);

    END LOOP;
END;

--so the procedure below can open the files......
CREATE OR REPLACE DIRECTORY in_files as '\mnt\your_folder';

create table stock_file_to_process as
(
--your csv structure here
--STOCKID number, 
--Open number,
--High number,
--Low number,
--Close number,
--Volume number
)
  ORGANIZATION EXTERNAL
  ( type oracle_loader
    default directory in_files
    access parameters
    ( fields terminated by ',' )
    location ('emp.dat')
  )
  /


CREATE PROCEDURE process_file(p_filename varchar2(255)) as
BEGIN
    execute immediate 'ALTER TABLE file_to_process LOCATION( p_filename )';

    for rec in (select Stockid,Open,High,Low,Close,Volume from stock_file_to_process)
    LOOP
        --your processing code here

    END LOOP;

END;