【发布时间】:2020-08-05 13:40:12
【问题描述】:
我有一些 PL/SQL 用于从一组表创建一个 excel 电子表格。我正在使用 SQL Developer 运行。在我的本地机器(也安装了数据库)上它工作正常,但在我们的测试环境中,数据库在另一台机器上(我无权访问),它没有。
失败的相关 PL/SQL 语句是:
CREATE OR REPLACE DIRECTORY TEST_DIR AS 'c:\TEST'
/
...
v_fh := UTL_FILE.FOPEN(upper(v_dir),v_file,'w',32767);
...
UTL_FILE.PUT_LINE(v_fh,'<ss:Row>');
我知道问题是因为CREATE DIRECTORY 创建了“服务器文件系统上的目录的别名”(Oracle Docs),而不是本地的。如何在本地机器上创建文件?使用 SPOOL 可以做到这一点吗?
【问题讨论】:
-
"如何在本地机器上创建文件" - 你不能。至少不使用 PL/SQL
-
你不能那样做。在服务器上创建它然后复制它。
-
我无权访问服务器来执行此操作。不过我也有同样的怀疑。但我知道我可以使用 SPOOL 在本地生成文件——我之前已经这样做过以创建 CSV 文件。那么这里也可以做同样的事情吗?
-
您可以使用脚本语言的功能在本地创建 SPOOL 文件,但不能使用 SQL 或 PLSQL。那就是你不能使用utl_file。您必须将结果集返回到您的脚本并从那里假脱机。
-
如果它被挂载并且从数据库中可见,你可以在共享目录上写入;如果您可以使用结果填充表格,则可以使用 Sql Developer 在 Excel 上导出该表格。
标签: oracle plsql oracle-sqldeveloper