0

我写了一个plsql脚本。该脚本根据某些标准从多个表中获取数据,并将数据格式化为逗号分隔格式。现在,就行数和行大小而言,获取的数据非常庞大。我想要 csv 文件中的数据。我试过做以下事情:

  1. 使用带有 DBMS_OUTPUT.PUT_LINE 的假脱机。DBMS_OUTPUT.ENABLE 的限制只有 20000 个字节,所以我的记录出现在假脱机文件的一半。
  2. 使用 utl_file 我可以在 csv 文件中获取它,但问题是我的数据库驻留在其他机器上(物理上),而我的应用程序驻留在其他机器上。所以当我触发 plsql 脚本时,它会在数据库机器上创建该文件。utl_file 也需要在数据库机器上创建目录对象,这很快就会成为我的安全问题。

无论如何,我可以将 plsql 脚本的输出通过管道传输到位于我的应用程序机器上(而不是我的数据库机器上)的文件中。您还可以建议使用其他一些编程语言的解决方案,例如 java 等。

4

1 回答 1

0

你有几个选择:

  1. dbms_output.enable 有一个可选参数——缓冲区大小。默认为 20,000,最大允许为 1,000,000 (Oracle 9i - 11g)。 dbms_output.enable(1000000);

  2. 如果空间不够,那么您可能需要运行 PL/SQL 块以一次只输出所需输出的一部分。
  3. 您可以将您的 PL/SQL 块重写为 SQL 查询吗?然后,如果您使用的是 sqlplus,则可以运行此命令以使输出以逗号分隔:

    set colsep ","

...然后使用假脱机并执行您的查询。

于 2012-11-20T22:25:19.333 回答