Oracle PL/SQL Tutorial/System Packages/File Read with UTL FILE

Материал из SQL эксперт
Перейти к: навигация, поиск

Get a line from a file with UTL_FILE package

   <source lang="sql">

SQL> SQL> SQL> CREATE OR REPLACE PROCEDURE get_line(file_in IN UTL_FILE.FILE_TYPE, line_out OUT VARCHAR2, eof_out OUT BOOLEAN)

 2  IS
 3  BEGIN
 4     UTL_FILE.GET_LINE (file_in, line_out);
 5     eof_out := FALSE;
 6  EXCEPTION
 7     WHEN NO_DATA_FOUND
 8     THEN
 9        line_out := NULL;
10        eof_out  := TRUE;
11  END;
12  /

SQL> SQL></source>


Read file

   <source lang="sql">

SQL> SQL> CREATE OR REPLACE PROCEDURE readit

 2  IS
 3    v_filehandle_input UTL_FILE.FILE_TYPE;
 4    v_newline     VARCHAR2(32767);
 5  BEGIN
 6    v_filehandle_input := UTL_FILE.FOPEN("c:\temp","functions.sql", "r", 32767 );
 7   loop
 8    BEGIN
 9      UTL_FILE.GET_LINE(v_filehandle_input,v_newline);
10      DBMS_OUTPUT.PUT_LINE(v_newline);
11    EXCEPTION
12      WHEN NO_DATA_FOUND THEN EXIT ;
13    END;
14   end loop;
15    UTL_FILE.FCLOSE (v_filehandle_input) ;
16  end;
17  /

Warning: Procedure created with compilation errors. SQL> show errors Errors for PROCEDURE READIT: LINE/COL ERROR


-----------------------------------------------------------------

3/22 PL/SQL: Item ignored 3/22 PLS-00201: identifier "UTL_FILE" must be declared 6/3 PL/SQL: Statement ignored 6/3 PLS-00320: the declaration of the type of this expression is

        incomplete or malformed

9/5 PL/SQL: Statement ignored 9/23 PLS-00320: the declaration of the type of this expression is

        incomplete or malformed

15/3 PL/SQL: Statement ignored LINE/COL ERROR


-----------------------------------------------------------------

15/20 PLS-00320: the declaration of the type of this expression is

        incomplete or malformed

SQL> SQL> SQL> SQL></source>


Read from the CLOB in chunks of 1000 characters and write to the output file

   <source lang="sql">

SQL> SQL> CREATE TABLE myClob

 2  (id NUMBER PRIMARY KEY,
 3   clob_data CLOB);

Table created. SQL> SQL> DECLARE

 2    clob_pointer CLOB;
 3    v_Buf VARCHAR2(1000);
 4    Amount BINARY_INTEGER :=1000;
 5    Position INTEGER :=1;
 6    fp UTL_FILE.FILE_TYPE;
 7  BEGIN
 8
 9    insert into myClob values (1,EMPTY_CLOB());
10
11    SELECT clob_data INTO clob_pointer FROM myClob WHERE id = 1;
12
13    if (DBMS_LOB.ISOPEN(clob_pointer)!=1) then
14
15      DBMS_LOB.OPEN (clob_pointer,DBMS_LOB.LOB_READONLY);
16
17    end if;
18
19    fp :=UTL_FILE.FOPEN("BFILE_DIR","output.dat","w");
20
21    LOOP
22
23      BEGIN
24
25        DBMS_LOB.READ (clob_pointer,Amount,Position,v_Buf);
26
27        UTL_FILE.PUT_LINE(fp,v_Buf,TRUE);
28
29        Position :=Position +Amount;
30
31      EXCEPTION
32
33        WHEN NO_DATA_FOUND THEN
34
35          EXIT;
36
37      END;
38
39    END LOOP;
40
41    UTL_FILE.FCLOSE(fp);
42
43    DBMS_LOB.CLOSE (clob_pointer);
44  END;
45  /

SQL> SQL> drop table myClob;</source>


Show file content

   <source lang="sql">

SQL> SQL> CREATE OR REPLACE PROCEDURE show_file (loc IN VARCHAR2,file IN VARCHAR2)

 2  IS
 3     fid UTL_FILE.FILE_TYPE := UTL_FILE.FOPEN (loc, file, "R");
 4     line VARCHAR2(2000);
 5  BEGIN
 6     DBMS_OUTPUT.PUT_LINE (file);
 7     LOOP
 8        UTL_FILE.GET_LINE (fid, line);
 9        DBMS_OUTPUT.PUT_LINE (line);
10     END LOOP;
11  EXCEPTION
12     WHEN OTHERS THEN UTL_FILE.FCLOSE (fid);
13  END;
14  /

SQL></source>