如何在Oracle中输入换行符?

ind*_*ent 55 oracle

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.';
Run Code Online (Sandbox Code Playgroud)

错误(34,33):PLS-00103:遇到以下其中一项时遇到符号"/":( - + case mod new null avg count current max min before sql stddev sum variance execute forall merge time timestamp interval date pipe

Rob*_*ove 113

Chr(Number)应该适合你.

select 'Hello' || chr(10) ||' world' from dual
Run Code Online (Sandbox Code Playgroud)

请记住,不同平台需要不同的新行字符:

  • CHR(10)=> LF,换行(unix)
  • CHR(13)=> CR,回车(窗口,与LF一起)

  • 是否有办法在不返回引号 (") 的情况下执行此操作?例如返回... Hello*linebreak* world__ ...而不是... "Hello*linebreak* world" ...? (2认同)
  • 数据不包含引号。您正在使用的工具正在返回报价。 (2认同)

Dou*_*eld 8

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

@Robert Love 的答案展示了可读代码的最佳实践,但您也可以只在代码中键入换行符。以下是来自 Linux 终端的示例,使用sqlplus

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.
Run Code Online (Sandbox Code Playgroud)

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

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

PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)

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

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


小智 6

begin   
   dbms_output.put_line( 'hello' ||chr(13) || chr(10) || 'world' );
end;
Run Code Online (Sandbox Code Playgroud)