使用pl / sql从文本文件中读取文件

时间:2015-12-11 10:54:26

标签: oracle plsql oracle11g plsqldeveloper

我想读取文本文件,将其存储在变量中并在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权限会引发不同的错误。在

1 个答案:

答案 0 :(得分:3)

几个问题:

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

此代码应该有效:

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;
/