【问题标题】:How to enter newline character in Oracle?如何在 Oracle 中输入换行符?
【发布时间】:2011-08-14 07:19:23
【问题描述】:
select col1, col2
    into name1, name2
    from table1
    where col1=col;

        m_sub := 'Subject ';
    m_msg := 'Hello '||name||' ,'||/n||/n||'Your order has been placed.';

错误(34,33):PLS-00103:在期望一个时遇到符号“/” 以下内容:( - + case mod new null avg count 当前最大最小先前 sql stddev 总和方差执行 forall 合并 时间 时间戳 间隔 日期 管道

【问题讨论】:

  • 换行符通常是\n。我现在没有可以使用的 Oracle 实例,但您可能应该将其包含在引号中,例如 'Hello '||name||' ,\n\nYour order has been placed.'
  • 我按照你说的做了尝试,但是当我执行我的程序时,它会打印:Hello Brian,\n\nYour order has been placed。

标签: oracle


【解决方案1】:
begin   
   dbms_output.put_line( 'hello' ||chr(13) || chr(10) || 'world' );
end;

【讨论】:

    【解决方案2】:

    根据 Oracle PLSQL 语言定义,字符文字可以包含“字符集中的任何可打印字符”。 https://docs.oracle.com/cd/A97630_01/appdev.920/a96624/02_funds.htm#2876

    @Robert Love 的回答展示了可读代码的最佳实践,但您也可以在代码中输入换行符。下面是一个使用 sqlplus 的 Linux 终端示例:

    SQL> set serveroutput on
    SQL> begin   
      2  dbms_output.put_line( 'hello' || chr(10) || 'world' );
      3  end;
      4  /
    hello
    world
    
    PL/SQL procedure successfully completed.
    
    SQL> begin
      2  dbms_output.put_line( 'hello
      3  world' );
      4  end;
      5  /
    hello
    world
    
    PL/SQL procedure successfully completed.
    

    除了 CHR(NN) 函数,您还可以使用像 u'\0085' 这样的 Unicode 文字转义序列,我更喜欢这是因为,你知道我们不再生活在 1970 年。请参阅下面的等效示例:

    SQL> begin
      2  dbms_output.put_line( 'hello' || u'\000A' || 'world' );
      3  end;
      4  /
    hello
    world
    
    PL/SQL procedure successfully completed.
    

    为了公平起见,我想值得注意的是,不同的操作系统使用不同的字符/字符序列来处理行尾。您必须考虑查看或打印程序输出的上下文,以确定您是否使用了正确的技术。

    • Microsoft Windows:CR/LF 或 u'\000D\000A'
    • Unix(包括 Apple MacOS):LF 或 u'\000A'
    • IBM OS390: NEL 或u'\0085'
    • HTML:'<BR>'
    • XHTML:'<br />'
    • 等。等等。

    【讨论】:


    • 在 Oracle Apex 应用程序的交互式报告单元中为我工作,用于列值列表聚合的案例。太好了,您提供了多个答案,我们都应该这样做
    【解决方案3】:

    Chr(Number) 应该适合你。

    select 'Hello' || chr(10) ||' world' from dual
    

    记住不同的平台期望不同的换行符:

    • CHR(10) => LF,换行(unix)
    • CHR(13) => CR,回车(windows,连同LF)

    【讨论】:

    • 有没有办法在不返回引号 (") 的情况下执行此操作?例如返回... Hellolinebreak world__ ...而不是... "Hello换行世界” ...?
    • 数据不包含引号。返回引号的是您使用的工具。
    • 使用SQL Developer 4.1查询。然后,无论我在哪里粘贴结果引号都围绕该字符串。
    • 听起来是一个很好的新问题。我不使用 SQL Developer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多