0

我的应用程序使用 UTL_FILE 生成一个 CSV 文件并将该文件写入数据库服务器位置,然后 SFTP 应将该文件传输到所需的共享位置。

第一部分已完成,第二部分需要帮助,即使用 PLSQL 的 SFTP

谢谢

4

2 回答 2

2

虽然完全可以使用该UTL_TCP包在 PL/SQL 中编写 SFTP 客户端,但这不太可能是一种实用的方法。一般来说,你有几个选择

  1. 使用众多Java SFTP 库之一创建 Java 存储过程,并从 PL/SQL 调用该 Java 存储过程。
  2. 创建一个使用服务器的命令行实用程序执行 SFTP 的 shell 脚本,并使用DBMS_SCHEDULER或通过 Java 存储过程调用该 shell 脚本。

如果您的 Oracle 数据库在 Windows 上运行,您还可以在上述两个选项中的任何一个中编写一个 .Net 存储过程而不是 Java 存储过程。然而,Java 存储过程会更常见。

于 2012-08-02T17:18:27.457 回答
0

如果您想尝试商业产品,您可以查看ORA_SFTP

您可以使用类似于此的代码块上传文件:

DECLARE 
 connection_id NUMBER; 
 private_key_handle BFILE;
 private_key BLOB; 
 PRIVATE_KEY_PASSWORD VARCHAR2(500); 
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);
 
 -- upload the private key just for a demo
 ORA_SFTP.UPLOAD(connection_id, private_key, 'data.csv');
 
 ORA_SFTP.DISCONNECT_HOST(connection_id);
END;
/

免责声明:我在滴滴软件工作

于 2016-10-25T08:38:57.030 回答