【问题标题】:Reading file from text file using pl/sql使用 pl/sql 从文本文件中读取文件
【发布时间】:2016-03-17 06:22:00
【问题描述】:

我想读取文本文件,将其存储在一个变量中并在 pl/sql 中输出该变量。我正在使用以下代码,但出现错误:语句被忽略。

create or replace PROCEDURE blah
AS
DECLARE
f UTL_FILE.FILE_TYPE;
s VARCHAR2(200);
BEGIN
f := UTL_FILE.FOPEN('C:\Users\s420105\Music','blahh.txt','R');
UTL_FILE.GET_LINE(f,s);
UTL_FILE.FCLOSE(f);
dbms_output.put_line(s);
END;

我不确定 UTL 权限,但我想如果是由于 UTL 权限,它会抛出不同的错误。

【问题讨论】:

    标签: oracle plsql oracle11g plsqldeveloper


    【解决方案1】:

    几个问题:

    • 您不需要DECLARE 语句。 syntaxCREATE [OR REPLACE] PROCEDURE [schema.]name AS ... BEGIN ... END;
    • UTL_FILE.FOPEN 的位置参数是目录对象的句柄,而不是包含目录路径的字符串。

    这段代码应该可以工作:

    CREATE DIRECTORY DIR__MUSIC AS 'C:/Users/s420105/Music';
    /
    
    CREATE PROCEDURE blah
    AS
      f UTL_FILE.FILE_TYPE;
      s VARCHAR2(200);
    BEGIN
      f := UTL_FILE.FOPEN( 'DIR__MUSIC', 'blahh.txt', 'R', 200 );
      UTL_FILE.GET_LINE( f, s );
      UTL_FILE.FCLOSE( f );
      DBMS_OUTPUT.PUT_LINE( s );
    END;
    /
    SHOW ERRORS;
    /
    

    读取整个文件的一种简单方法是:

    CREATE DIRECTORY DIR__MUSIC AS 'C:/Users/s420105/Music';
    /
    
    CREATE PROCEDURE blah
    AS
      f CLOB;
    BEGIN
      f := DBMS_XSLPROCESSOR.READ2CLOB( 'DIR__MUSIC', 'blahh.txt' );
      DBMS_OUTPUT.PUT_LINE( f );
    END;
    /
    SHOW ERRORS;
    /
    

    【讨论】:

    • 感谢您的解释。虽然您的代码在我尝试执行时编译没有错误,但我收到运行时错误无效文件操作,并且之前的代码有错误:数字或值错误字符到数字转换错误。
    • 包含ORA- 号码的完整错误消息是什么?此外,用户(正在编译/运行程序的人)是否获得了目录的读取权限?尝试GRANT READ ON DIRECTORY dir__music TO username;(来自具有适当特权的用户)。
    • 这是一个本地目录,不要认为有任何权限问题。错误详细信息是:ORA-29283:无效文件操作 ORA-06512:在“SYS.UTL_FILE”,第 536 行 ORA-29283:无效文件操作 ORA-06512:在“XDB.DBMS_XSLPROCESSOR”,第 265 行 ORA-06512:在“d743721.BLAH”,第 5 行 ORA-06512:第 2 行
    • 这不是 SQL 的问题,而是权限的问题。您需要检查 (a) 目录是否存在 (b) 您有权从目录中读取 (c) 文件是否存在 (d) 您是否有权读取文件(尝试通过操作系统打开它)和 (e ) oracle 用户有权打开文件(运行GRANT 命令)。我建议在网上搜索 ORA-29283 并查看人们建议修复权限的内容。
    猜你喜欢
    • 2020-09-21
    • 2016-11-16
    • 2014-10-31
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多