0

I have a side project I'm working on currently that requires me to copy over a .csv file from a remote FTP and save it locally. I figured I would use DBMS_SCHEDULER.GET_FILE but I do not have permission. When I asked my manager, he said that I wont be able to get privileges to do this and should look up other ways.

After researching for a couple of days I keep coming back to DBMS_SCHEDULER, am I out of luck or are my searching skills terrible.

Thanks

4

1 回答 1

3

我不确定您是否要为此使用DBMS_SCHEDULER;根据我从文档中了解到的(我自己从未使用过),FTP 站点必须对所有人完全开放;有一个参数destination_permissions,但它只是"Reserved for future use",即目前无法指定任何权限。

如果我是对的,那么我同意你的经理,尽管不一定出于相同的原因(似乎你永远不会获得使用许可DBMS_SCHEDULER,我希望这是不正确的)。

还有其他方法可以做到这一点:

  1. UTL_TCP; 这只是一种通过 TCP/IP 协议进行交互的方法。Oracle Base 有一篇文章,其中包括一个基于 FTP 包UTL_TCP以及如何使用它的说明。这也需要使用UTL_FILE可以写入 OS 文件的包。

  2. UTL_HTTP; 我 99% 确定可以使用它连接到 FTP;当然可以连接到 SFTP/任何服务器。这将需要更多的工作,但从长远来看这是值得的。它还需要使用UTL_FILE.

  3. 一个Java存储过程直接到FTP;这可能是最好的方法;使用众多Java FTP 库之一创建一个。

  4. 一个调用操作系统命令的Java存储过程;这是最简单的方法,但扩展性最低。早在 2008 年, Oracle 就发布了一份关于从 PL/SQL 中调用操作系统命令的白皮书,但还有很多其他内容(包括Oracle Base

最后,您可能会质疑这是否真的是您想要做的......

  1. 你用什么调度器?它有事件驱动的调度吗?如果是这样,则无需从 Oracle 内部进行 FTP;用于UTL_FILE将文件写入操作系统,然后从那里写入操作系统命令。

  2. 另一个文件最初是否在数据库中?如果是这种情况,您不需要提取它。您可以使用DBMS_FILE_TRANSFER直接从数据库中收集数据,甚至创建JDBC连接或(更简单)数据库链接以直接选择数据。

于 2013-08-19T20:15:08.207 回答