ORACLE stored process output data to the specified file

1 permission to use the dba role gives users log on to the oracle (hly201907) UTL_FILE use the
GRANT EXECUTE ON UTL_FILE TO hly201907;

2 Create a working folder (D: / TEMP) and is it a nickname (D_OUTPUT)

create or replace directory D_OUTPUT as 'D:/TEMP';

3 Use the dba role log on to the oracle given user rights (hly201907) reading and writing folders

grant read,write on directory D_OUTPUT to hly201907;

4 create a stored procedure (the last brush data to a file)

create or replace PROCEDURE TEST AS 
V_FILE UTL_FILE.FILE_TYPE;
L_BUFFER   VARCHAR2(4000);
V_SqlString VARCHAR2(2000); 
BEGIN
   V_FILE := UTL_FILE.FOPEN('D_OUTPUT', 'Data.txt', 'w');-- 写文件
   
    -- 定义sql 语句
    V_SqlString := 'select to_char(sysdate,'|| '''yyyy-mm-dd hh24:mi:ss''' || ') from dual';
    -- 执行sql 语句 并把结果赋值给L_BUFFER
    execute immediate V_SqlString into L_BUFFER; 

    -- 把L_BUFFER 写入到文件 连续写入三次
    UTL_FILE.PUT_LINE(V_FILE, L_BUFFER);
    UTL_FILE.PUT_LINE(V_FILE, L_BUFFER);
    UTL_FILE.PUT_LINE(V_FILE, L_BUFFER);

     -- 这里关闭文件。
    UTL_FILE.FCLOSE(V_FILE);
    
  NULL;
END TEST;

5 to create stored procedures (each addition, times and refresh)

create or replace PROCEDURE TEST AS 
V_FILE UTL_FILE.FILE_TYPE;
L_BUFFER   VARCHAR2(4000);
V_SqlString VARCHAR2(2000); 
BEGIN

    V_FILE := UTL_FILE.FOPEN('D_OUTPUT', 'Data.txt', 'w');-- 写文件

   -- 定义sql 语句
    V_SqlString := 'select to_char(sysdate,'|| '''yyyy-mm-dd hh24:mi:ss''' || ') from dual';
    -- 执行sql 语句 并把结果赋值给L_BUFFER
    execute immediate V_SqlString into L_BUFFER; 

    -- 把L_BUFFER 写入到文件
    UTL_FILE.PUT_LINE(V_FILE, L_BUFFER);

    -- 这里关闭文件。
    UTL_FILE.FCLOSE(V_FILE);

    -- 读取文件
    V_FILE := UTL_FILE.FOPEN('D_OUTPUT', 'Data.txt', 'a');

    -- 定义sql 语句
    V_SqlString := 'select to_char(sysdate,'|| '''yyyy-mm-dd hh24:mi:ss''' || ') from dual';
    -- 执行sql 语句 并把结果赋值给L_BUFFER
    execute immediate V_SqlString into L_BUFFER; 

    -- 把L_BUFFER 写入到文件
    UTL_FILE.PUT_LINE(V_FILE, L_BUFFER);

    -- 这里关闭文件。
    UTL_FILE.FCLOSE(V_FILE); 
  NULL;
END TEST;

 6 this document will be output to the specified output file (D: /TEMP/Data.txt).

 

7 may output data (or log) is written to a single SQL stored procedure, as follows.

create or replace procedure OUTPUT_LOG(fileName IN VARCHAR2,message IN VARCHAR2 ) is
-- 需要两个参数 第一个参数是输出的文件名称  第二个参数是要输出的字符串
V_FILE UTL_FILE.FILE_TYPE;
V_SqlString VARCHAR2(200);
V_message VARCHAR2(200);
begin
    V_SqlString := 'select to_char(sysdate,'|| '''yyyy-mm-dd hh24:mi:ss''' || ') from dual';
    execute immediate V_SqlString into V_message; 
    V_message :=message||'-------------'||V_message;
    
    V_FILE := UTL_FILE.FOPEN('D_OUTPUT', fileName||'.log', 'a');-- 写文件
    UTL_FILE.PUT_LINE(V_FILE, V_message);
    -- 这里关闭文件。
    UTL_FILE.FCLOSE(V_FILE);
end OUTPUT_LOG;

8 Data output (log) stored procedure call mode, for example, in the plsql

BEGIN
OUTPUT_LOG('2019-09-16','TEST');
END;

9 This will in directory D_OUTPUT: add a file of today's date 2019-09-16.log file (D / TEMP), where the data is

TEST---------------------2019-09-16 18:09:58

Published 17 original articles · won praise 7 · views 5724

Guess you like

Origin blog.csdn.net/qq_29461579/article/details/96996092