ORACLE如何在新行中打印文本

Posted

技术标签:

【中文标题】ORACLE如何在新行中打印文本【英文标题】:ORACLE how to print text in a new line 【发布时间】:2013-07-18 19:17:57 【问题描述】:

基本上它是我试图通过 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 天开始一​​直在尝试...请帮助。

【问题讨论】:

您是在 Unix 环境还是 Windows 环境中写入文件? Unix 只使用一个 LF 字符 (10),而 Windows 需要一个 CR 后跟 LF (13,10)。 @Jeffrey Kemp Server OSSolaris 5.10databaseOracle 9.2.0.8.0 文件只写在 oracle 目录下的 solaris 文件系统中。 @JeffreyKemp:我想我也应该提到这一点,最终用户通过 \\server-path\file_name.txt 访问它以进行打印,因为它是一个 samba 目录可以通过任何客户端操作系统访问。在我们的例子中,通常客户端 PC 会在 Windows 中。 @JeffreyKemp 谢谢。它通过将 chr(13) 和 chr(10) 像这样 ||CHR(13)||CHR(10) 附加在一起。感谢您的指导。 我的问题已回答,请关闭。 【参考方案1】:

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

Unix 只使用一个 LF 字符 CHR(10),而 Windows 需要一个 CR 后跟 LF CHR(13)||CHR(10)

【讨论】:

以上是关于ORACLE如何在新行中打印文本的主要内容,如果未能解决你的问题,请参考以下文章

如何在控制台中向已打印的表中添加新行?

如何在 Apex 交互式报表的列数据中显示新行

如何在文本框的文本中添加新行?

如何在 Java 中的新行上打印多个整数

如何在不添加新行的情况下在文本框的边界之外编写文本?

如何使用触发器在同一张表中插入新行(Oracle PL/SQL 10G)?