我想使用Oracle SQL或PL SQL读取位于FTP或SFTP服务器上的.csv文件的数据。 我尝试了下面的代码,它显示了像SSH-2.0-OpenSSH_5.3这样的输出,这意味着我希望连接。
declare
c utl_tcp.connection; -- TCP/IP connection to the Web server
ret_val pls_integer;
BEGIN
c := utl_tcp.open_connection(remote_host => 'ftp.******.******.com'
,remote_port => 21
,charset => 'US7ASCII'
-- ,wallet_path => '****************'
-- ,wallet_password => '**********'
); -- open connection
-- ret_val := utl_tcp.write_line(c, 'GET / HTTP/1.0'); -- send HTTP request
ret_val := utl_tcp.write_line(c);
BEGIN
LOOP
dbms_output.put_line(utl_tcp.get_line(c, TRUE)); -- read result
END LOOP;
EXCEPTION
WHEN utl_tcp.end_of_input THEN
NULL; -- end of input
END;
utl_tcp.close_connection(c);
END;
/
有人可以帮我解决下一步如何打开和读取SFTP / FTP服务器中存在的.csv文件并将其加载到Oracle DB表中吗?
答案 0 :(得分:0)
您需要一些工具/应用程序来打开FTP或SFTP中存在的文件并将其中的数据加载到数据库中,有一些工具可用于将它们加载到数据库,如Dollar Universe,潮汐调度程序等。 sql和pl / sql代码。这些工具与需要手动触发的unix / windows OS链接
答案 1 :(得分:0)
这是一个你正在询问的摘录。
l_conn := ftp.login('ftp.company.com', '21', 'ftpuser', 'ftppassword');
ftp.ascii(p_conn => l_conn);
ftp.get(p_conn => l_conn,
p_from_file => '/u01/app/oracle/test.txt',
p_to_dir => 'MY_DOCS',
p_to_file => 'test_get.txt');
ftp.logout(l_conn);
END;
/
以下是完整的博文: Oracle-base.com
答案 2 :(得分:0)
如果您需要PL / SQL中的SFTP客户端,可以查看DidiSoft的商业OraSFTP软件包。
以下是用法示例:
DECLARE
connection_id NUMBER;
private_key_handle BFILE;
private_key BLOB;
PRIVATE_KEY_PASSWORD VARCHAR2(500);
downloaded_file BLOB;
BEGIN
DBMS_LOB.createtemporary(PRIVATE_KEY, TRUE);
private_key_handle := BFILENAME('PGP_KEYS_DIR', 'test_putty_private.ppk'); -- directory name must be Upper case
DBMS_LOB.OPEN(private_key_handle, DBMS_LOB.LOB_READONLY);
DBMS_LOB.LoadFromFile( private_key, private_key_handle, DBMS_LOB.GETLENGTH(private_key_handle) );
DBMS_LOB.CLOSE(private_key_handle);
PRIVATE_KEY_PASSWORD := 'changeit';
connection_id := ORA_SFTP.CONNECT_HOST('localhost', 22, 'nasko', private_key, private_key_password);
downloaded_file := ORA_SFTP.DOWNLOAD(connection_id, 'remote_file.dat');
ORA_SFTP.DISCONNECT_HOST(connection_id);
END;
/
免责声明:我为DidiSoft工作