【问题标题】:Can you please help me in Oracle for writing the table contents in to a file using UTL functions你能帮我在 Oracle 中使用 UTL 函数将表内容写入文件吗
【发布时间】:2009-06-22 10:47:37
【问题描述】:

在编写用于从表内容创建 CSV 文件的 SQL 过程时, 我陷入了以下错误:

ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 488
ORA-29283: invalid file operation
ORA-06512: at "DSI_DPIPE.BUSSHOURS", line 28
ORA-06512: at "DSI_DPIPE.BUSSHOURS", line 55
ORA-06512: at line 1

第一行是:

file_http UTL_FILE.file_type;

即使我使用该语句,也会出现同样的错误:

file_http sys.UTL_FILE.file_type;

提前感谢您提供宝贵的解决方案。

【问题讨论】:

  • 您能描述一下您的环境吗?即什么操作系统,什么版本的Oracle?
  • 应该说“描述”(请注意,描述会是个好词...)
  • 请提供更多代码。第 28 行是什么?

标签: oracle csv plsql ora-06512


【解决方案1】:

使用 CREATE DIRECTORY 功能而不是 UTL_FILE_DIR 进行目录访问验证。

UTL_FILE_DIR = * 是危险的,因为它允许有权访问 utl_file 包的数据库用户以用户 oracle 的权限读取/写入数据库服务器上的文件(datafiles、init.ora、listener.ora 等)。

您是否具有对该目录的写入/读取权限。服务器上的用户oracle需要读/写权限。

【讨论】:

    【解决方案2】:

    是否有oracle用户访问权限来写入你要放置文件的目录?

    编辑:如果您在 Unix 环境中,您应该以 oracle 用户身份手动登录,转到您尝试创建文件的路径并使用命令“touch”创建一个文件。如果不能用这种方式创建文件,你就知道问题出在操作系统的“访问权限”上,否则问题出在ORACLE。 (将减少 50% 的搜索;D)

    编辑 2:
    如果 UTL_FILE_DIR = * 则禁用数据库权限,并且所有用户都可以访问所有文件和目录。但我认为这仅适用于数据库级别,因此操作系统也有话要说。如果oracle用户对某个目录没有写权限,那么无论UTL_FILE_DIR怎么说,数据库的用户都不能获得这个权限。

    【讨论】:

    • 我有 UTL_FILE_DIR = * 所以没有问题
    • 你能延长你的时间来建议我解决这个错误的另一种方法
    【解决方案3】:

    检查目录路径是否正确,并且您设置了正确的权限(即操作系统允许 Oracle 写入该位置)。

    【讨论】:

    • 对不起,我没看懂那条评论,你能改写一下吗?
    • 我有 UTL_FILE_DIR = * 因此权限设置没有问题
    • UTL_FILE_DIR = * 是 oracle 内部的设置。它消除了对可以写入哪些目录的限制。如果操作系统(在您的情况下为 unix)阻止 Oracle 写入该位置,则没有区别。
    • 尝试使用与 oracle 数据库相同的操作系统用户帐户登录 unix,并将文件写入该位置。
    猜你喜欢
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 2021-02-21
    • 2021-08-29
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多