UTL_FILE.FOPEN() 过程不接受目录路径?

2023-11-26

我正在尝试写入存储在 c:\ 驱动器中名为 vin1.txt 的文件 并收到此错误。请提出建议!

> ERROR at line 1: ORA-29280: invalid
> directory path ORA-06512: at
> "SYS.UTL_FILE", line 18 ORA-06512: at
> "SYS.UTL_FILE", line 424 ORA-06512: at
> "SCOTT.SAL_STATUS", line 12 ORA-06512:
> at line 1

这是代码

  create or replace procedure sal_status
   (
    p_file_dir IN varchar2,
    p_filename IN varchar2)
     IS  
    v_filehandle utl_file.file_type;
    cursor emp Is
        select * from employees
        order by department_id;
    v_dep_no departments.department_id%TYPE;
     begin
         v_filehandle :=utl_file.fopen(p_file_dir,p_filename,'w');--Opening a file
         utl_file.putf(v_filehandle,'SALARY REPORT :GENERATED ON %s\n',SYSDATE);
         utl_file.new_line(v_filehandle);
         for v_emp_rec IN emp LOOP
            v_dep_no :=v_emp_rec.department_id;
            utl_file.putf(v_filehandle,'employee %s earns:s\n',v_emp_rec.last_name,v_emp_rec.salary);                    
         end loop;
        utl_file.put_line(v_filehandle,'***END OF REPORT***');
        UTL_FILE.fclose(v_filehandle);
     end sal_status;

execute sal_status('C:\','vin1.txt');--Executing

从 Oracle 9i 开始,有两种方法可以声明与 UTL_FILE 一起使用的目录。

较旧的方法是设置 INIT.ORA 参数 UTL_FILE_DIR。我们必须重新启动数据库才能使更改生效。该值可以像任何其他 PATH 变量一样;它接受通配符。使用这种方法意味着传递目录路径......

UTL_FILE.FOPEN('c:\temp', 'vineet.txt', 'W');

9i 中引入的替代方法是声明一个目录对象。

create or replace directory temp_dir as 'C:\temp'
/

grant read, write on directory temp_dir to vineet
/

目录对象需要确切的文件路径,并且不接受通配符。在这种方法中,我们传递目录对象名称......

UTL_FILE.FOPEN('TEMP_DIR', 'vineet.txt', 'W');

UTL_FILE_DIR 已被弃用,因为它本质上是不安全的 - 所有用户都可以访问路径中指定的所有操作系统目录,而 Directory 对象的读写权限可以单独授予各个用户。此外,使用 Directory 对象,我们可以添加、删除或更改目录,而无需弹回数据库。

无论哪种情况,oracle操作系统用户必须具有读取和/或写入权限在操作系统目录下。如果不明显,这意味着该目录必须对数据库服务器可见。因此,我们不能使用任何一种方法将本地 PC 上的目录公开给远程数据库服务器上运行的进程。文件必须上传到数据库服务器或共享网络驱动器。


If the oracle操作系统用户对操作系统目录没有适当的权限,或者如果数据库中指定的路径与实际路径不匹配,程序将抛出此异常:

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7

此错误的 OERR 文本非常清楚:

29283 -  "invalid file operation"
*Cause:    An attempt was made to read from a file or directory that does
           not exist, or file or directory access was denied by the
           operating system.
*Action:   Verify file and directory access privileges on the file system,
           and if reading, verify that the file exists.

从 Oracle 18c 开始,除了向后兼容性之外,不支持 UTL_FILE_DIR。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTL_FILE.FOPEN() 过程不接受目录路径? 的相关文章

随机推荐

  • 为什么程序员有时将“C++/STL”视为一种单独的语言?

    这似乎是一个微不足道的问题 但却是最近困扰我的一个问题 为什么有些程序员将 C STL 视为另一种语言 STL 是 C 标准库的一部分 因此也是 C 语言的一部分 它不是一个单独的组件 并且它并不单独存在于 C 的范围内 然而 有些人却一直
  • 从 web.config applicationSettings 获取值到 ASP.NET 标记中

    我现在可能完全偏离了轨道 所以我只会在这里问这个问题 以便有人可以帮助我 我想要做的是将 web config 中存储在 applicationSettings 区域中的值插入到我的 aspx 标记中 具体来说 我想从配置中读取 URL 这
  • Selenium 在移动设备上测试是否值得?

    我们一直计划使用 Selenium 对我们的 Web 应用程序进行 UI 测试 我们现在正在重新考虑 据我所知 Android 和 iOS 设备的网络驱动程序并不使用用户实际使用的浏览器 相反 他们使用 WebView 它可能与实际的浏览器
  • 在 Windows 上安装 Node 包时出现 ETIMEDOUT 错误

    我正在尝试使用全新安装的节点中的 npm 在我的 Windows 计算机上安装节点包 但是 我收到 ETIMEDOUT 错误 我检查了一些其他有类似问题的 stackoverflow 问题 几乎所有问题都与代理后面的问题有关 我的情况并非如
  • 从 Rails 3 项目的 lib 目录中访问模型

    我在 lib 目录中有一个文件 它使用模型中定义的一些常量 例如 class User lt ActiveRecord Base MAX EMAIL ADDRESS LENGTH 255 end 然后我在 lib foo rb 中 modu
  • 使用BeautifulSoup获取特定标签后的值

    我很难让 BeautifulSoup 为我抓取一些数据 从此代码示例中访问日期 实际数字 2008 年 的最佳方法是什么 这是我第一次使用 Beautifulsoup 我已经弄清楚如何从页面上刮掉 url 但我无法完全缩小范围以仅选择单词
  • NestJS JwtStrategy使用configService传递密钥

    我有文档示例中的 JwtStrategy 类 https docs nestjs com techniques authentication Injectable export class JwtStrategy extends Passp
  • spring-oauth2 登录成功处理程序

    有没有办法使用 spring oauth2 添加登录成功处理程序 我尝试使用基本身份验证过滤器 但它仅过滤客户端凭据而不是用户凭据 或者我是否需要创建自定义用户身份验证管理器 TIA 该解决方案适用于密码流 也适用于我不确定的其他解决方案
  • Java 中覆盖成员变量(变量隐藏)

    我正在研究 Java 中的重写成员函数 并考虑尝试重写成员变量 所以 我定义了类 public class A public int intVal 1 public void identifyClass System out println
  • 如何让 Active Admin 在登录后与 Pundit 合作

    我已将配置专家适配器授权添加到我的应用程序中 config authorization adapter ActiveAdmin PunditAdapter 当我登录时 电子邮件受保护 凭据我收到此错误 Pundit NotDefinedEr
  • 将 MySQL 连接到 MATLAB?

    我想知道如何将 MySQL 数据库连接到 MATLAB 软件 我下载了 jdbc 连接器 但不知道如何指定路径 我假设您已经创建了一个名为 mybase 的数据库 并且使用没有密码的 root 用户 在现实生活中不要这样做 您必须记住将 m
  • 获取 HTML 页面中带有“position:fixed”的所有元素?

    这样做的原因 我正在调试网页的 css 出现了一些元素 但它们不应该出现 我怀疑这是元素定位的问题 因此我想找到这些定位的元素并一一检查 这个使用的是 jQuery 我希望你能找到它 var find filter function ret
  • 我可以使用 Serilog 记录到单独的文件吗?

    我的 ASP NET Core 2 1 应用程序将所有 常用内容 记录到 Serilog 文件接收器 即与应用程序相关的内容 例如调试 监控 性能等 但是 我们还需要将其他数据记录到单独的文件中 与应用程序无关 但与客户相关 这种东西应该进
  • 使用 gsub 在 data.table 中添加新列

    抱歉 这是一个非常基本的问题 解决方案必须非常简单 但我找不到它 尝试使用 gsub 在 data table 中添加新列 我收到警告 参数 replacement 的长度 gt 1 并且仅使用第一个元素 并且所有 data table 行
  • 将关键字添加到 Notepad++ 的 Ruby 语法突出显示中

    我正在尝试添加require and include作为 Notepad 的 Ruby 关键字 但我遇到了一些麻烦 我修改了 langs model xml 文件的 ruby 语言标签 如下所示
  • .NET Core Web API 部署到 Azure 后无法正常工作

    我有一个简单的 NET Core Web API 应用程序 创建新项目时由 Visual Studio 创建的应用程序 我想通过 FTP 将其部署到 Azure 应用服务 作为 Team Foundation Server TFS 2017
  • char 数组作为放置 new 的存储

    以下合法的 C 是否具有明确的行为 class my class int main char storage sizeof my class new void storage my class 或者这是因为指针转换 对齐考虑而出现问题 是的
  • os.path.dirname(__file__) 返回空

    我想获取执行 py 文件的当前目录的路径 例如一个简单的文件D test py与代码 import os print os getcwd print os path basename file print os path abspath f
  • 如何使用 python 建立 TLS 连接?

    我想创建到服务器的 TLS 连接 然后 我想发送一些加密的数据到服务器 我知道主机名和端口并且有证书 令人惊讶的是 我还收到了服务器的私钥 但是 我认为我收到私钥是不正常的 第一个问题那我真的需要私钥来建立 TLS 连接吗 顺便说一句 我正
  • UTL_FILE.FOPEN() 过程不接受目录路径?

    我正在尝试写入存储在 c 驱动器中名为 vin1 txt 的文件 并收到此错误 请提出建议 gt ERROR at line 1 ORA 29280 invalid gt directory path ORA 06512 at gt SYS