ORACLE如何在新行中打印文本

时间:2013-07-18 19:17:58

标签: oracle stored-procedures plsql utl-file

基本上它是用文本打印的一封信,我试图通过Oracle PL / SQL程序进行打印。

我的代码如下: -

DECLARE
       out_file UTL_FILE.file_type;    lv_file VARCHAR2 (200) DEFAULT TO_CHAR (SYSDATE, 'yyyymmddhhmiss')||'.txt' ;LVSQL varchar2(4000);    lV_TXT varchar2(4000);lv_txt1 varchar2(4000);lv_final_str varchar2(4000); BEGIN    out_file := UTL_FILE.fopen ('SPOOL_DIR', lv_file, 'W');    for i in 1..5 loop
       begin
            select tn,tt into lv_txt,lv_txt1 from 
            (SELECT rownum r, TNAME tn ,TABTYPE tt FROM tab) where r=j;
            lv_final_str:=lV_TXT||chr(9)||lv_txt1||CHR(13);
            utl_file.put_line(Out_file,lv_final_str );
       end;    end loop;

       UTL_FILE.fclose (out_file);
    END;

我能够通过将lv_final_str与CHR(13)连接起来并在循环中使用* utl_file.put_line(Out_file,lv_final_str); * 来打印下一行中的值

我想通过收集循环内变量中的文本来做同样的事情。 并使用下面的代码在循环外写入变量的值。

DECLARE
   out_file UTL_FILE.file_type;
   lv_file VARCHAR2 (200) DEFAULT TO_CHAR (SYSDATE, 'yyyymmddhhmiss')||'.txt' ;LVSQL varchar2(4000);
   lV_TXT varchar2(4000);lv_txt1 varchar2(4000);tmpvar varchar2(4000);lv_build_str varchar2(4000);lv_final_str varchar2(4000);
BEGIN
   --SELECT TO_CHAR (SYSDATE, 'yyyymmddhhmiss') INTO lv_file FROM DUAL;
   out_file := UTL_FILE.fopen ('SPOOL_DIR', lv_file, 'W');
   for i in 1..5 loop
       begin
            select tn,tt into lv_txt,lv_txt1 from 
            (SELECT rownum r, TNAME tn ,TABTYPE tt FROM tab) where r=i;
            tmpvar:=lV_TXT||chr(9)||lv_txt1||CHR(13);
            lv_build_str := lv_build_str || chr(9)||tmpvar;
--            utl_file.put_line(Out_file,lv_final_str );
       end;
   end loop;
   lv_final_str:=lv_build_str;
    utl_file.put_line(Out_file,lv_final_str );
   UTL_FILE.fclose (out_file);
END;

怎么做,请帮忙。 我也使用chr(10),它不是在新行中打印。 如果你观察用于打印标签空间的chr(9)运行良好。 只有下一行chr(10)或chr(13)不起作用。为什么......?

任何帮助.. 自从过去3天以来我一直在努力...请帮忙。

1 个答案:

答案 0 :(得分:2)

这取决于您是要写入Unix环境的文件还是Windows。

Unix仅使用单个LF字符CHR(10),而Windows期望CR后跟LF CHR(13)||CHR(10)