在不使用 UTL_FILE 的情况下从 PL/SQL 中的文件读取/写入数据

Posted

技术标签:

【中文标题】在不使用 UTL_FILE 的情况下从 PL/SQL 中的文件读取/写入数据【英文标题】:Read/Write data from/to a file in PL/SQL without using UTL_FILE 【发布时间】:2009-03-26 03:46:28 【问题描述】:

是否可以在不使用 Oracle 10g 中的 UTL_FILE 包的情况下从 PL/SQL 块中的文件读取/写入数据?

我目前有一个包含一组主键(大约 28000)的文件,我需要查询一个表以获取需要写入文件的其他数据。我使用的架构非常受限,没有任何创建权限。此外,没有为 UTL_FILE 中的过程正常工作设置必要的读/写权限的目录。要求 DBA 提供额外的权限会花费太多时间。

有没有办法解决这个问题?

提前致谢。

[编辑]我无法将数据加载到表格中。没有要加载的表或创建表的权限。我认为这是问题中最困难的部分。如果查询条件不能方便地成为查询本身的一部分(即在单独的文件中),如何查询数据库?如果主键数量较少,我可以生成一些选择语句来提取 sqlplus 中的数据(使用 spool),但是 28000 似乎太大了。

【问题讨论】:

好吧, 如果你不被允许做任何事情,你应该怎么做呢?我说你应该找个病人。 与您的 DBA 交朋友,这对开发人员来说非常重要。 【参考方案1】:

如果您无法设置目录,我会说您不走运。 您要求在数据库服务器上读取和创建文件。这是您的 DBA 应该知道的事情。

您确定需要服务器上的文件吗?您可以将文件从客户端加载到表中(使用通常的客户端工具),然后从那里读取/写入数据吗?

更新:

我无法将数据加载到表中。没有要加载的表或创建表的权限。如果主键数量较少,我可以生成多个选择语句来提取 sqlplus 中的数据(使用 spool),但是 28000 似乎太大了。

28000 不算多。在客户端循环。

【讨论】:

我掉进了过早优化的陷阱。感谢您的提醒。【参考方案2】:
    您可以使用 UTL_TPC 包通过 TCP 数据包写入 FTP 服务器。 最好在运行包之前将主键加载到表中,以允许 pl/sql 读取/写入主键表。 用 20000 个键作为插入语句编写一个巨大的 pl/sql 程序,以构建一个内存表并使用它来查询 / 等。然后使用 sqlplus 假脱机结果。或将结果通过电子邮件发送给自己的邮件包。

【讨论】:

UTL_TPC 看起来很有趣。将来可能会派上用场。谢谢。

以上是关于在不使用 UTL_FILE 的情况下从 PL/SQL 中的文件读取/写入数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用表单的情况下从 jsp 调用 servlet

如何在不使用子进程的情况下从 python 自动化脚本中运行 python 'sdist' 命令?

在不使用表格的情况下从 BigQuery 中的 csv 文件中检索数据

如何在不使用 Xcode、iPhone 中的谷歌地图的情况下从地址获取纬度和经度

Django 在不使用字段查找的情况下从查询集中排除特定实例

如何在不使用 foreach 循环的情况下从视图访问模型