1

这个问题是UTL_FILE.FOPEN在PL/SQL中执行命令。

UTL_FILE.FOPEN在客户端或服务器端打开文件?

假设我在 MACHINE A 中运行 Oracle 客户端 10,并且正在连接 MACHINE B(即服务器)。

当我通过Java应用程序在机器A中执行以下存储过程时,

DECLARE
  fileHandler UTL_FILE.FILE_TYPE;
BEGIN
  fileHandler := UTL_FILE.FOPEN('/app/dir', 'test.txt', 'W');
  UTL_FILE.PUTF(fileHandler, 'Writing TO a file\n');
  UTL_FILE.FCLOSE(fileHandler);
END;    
/

问题是目录/app/dir应该在 MACHINE A(client) 或 MACHINE B(Server)

4

1 回答 1

3
utl_file.fopen

只会打开由 DBA 设置的目录中的文件,并且这些目录位于数据库所在的同一台服务器上。MachineB 在您的问题中。和。你不能访问任何你想要的旧目录。

DBA 可以通过两种方式来控制它——一个 init.ora 参数utl_file_dir 或通过创建目录对象。

要查看utl_file_dir 是否可以从 V$PARAMETERS 中选择,请尝试

select value 
 from v$parameters
where name='utl_file_dir';

要查看可以在 pl/sql 中访问的目录对象:

SELECT owner, directory_name, directory_path
  FROM all_directories;

这是两个截然不同的东西。utl_file_dir 是一项旧功能,目录对象较新。

于 2012-11-27T11:44:34.240 回答