Oracle 用换行符替换字符

Oracle Replace char with newline

我正在尝试用换行符替换 Select 中的一个字符。但它确实有效。

代码如下:

vMsg := to_char(rec.CREATED,'HH24:MI') || ' - ' || replace(rec.FILELIST, '|', chr(13) || chr(10)) || chr(13) || chr(10) || chr(13) || chr(10) || 'Test'

但这不起作用,好像 Oracle 替换了'|'与 ' '

示例输入:

Audio.hx|Camera.hx|Circle.hx|Color.hx|Component.hx|Core.hx|Debug.hx|Draw.hx|Emitter.hx|Entity.hx|Events.hx|Game.hx|Input.hx|IO.hx|Log.hx|

示例输出:

Audio.hx Camera.hx Circle.hx Color.hx Component.hx Core.hx Debug.hx Draw.hx Emitter.hx Entity.hx Events.hx Game.hx Input.hx IO.hx Log.hx

我的预期:

Audio.hx

Camera.hx

Circle.hx

Color.hx

...

使用 TRANSLATEREPLACESQL*Plus 中非常适合我。如果您无法正常查看,则可能是您的 客户端.

有问题

例如,


SQL接近

使用翻译

SQL> WITH DATA AS
  2    (SELECT 'Audio.hx|Camera.hx|Circle.hx|Color.hx|Component.hx|Core.hx|Debug.hx' str
  3    FROM dual
  4    )
  5  SELECT str, TRANSLATE(str, '|', chr(10)) str_newline FROM DATA
  6  /

STR                                                                 STR_NEWLINE
------------------------------------------------------------------- --------------------
Audio.hx|Camera.hx|Circle.hx|Color.hx|Component.hx|Core.hx|Debug.hx Audio.hx
                                                                    Camera.hx
                                                                    Circle.hx
                                                                    Color.hx
                                                                    Component.hx
                                                                    Core.hx
                                                                    Debug.hx


SQL>

使用REPLACE

SQL> WITH DATA AS
  2    (SELECT 'Audio.hx|Camera.hx|Circle.hx|Color.hx|Component.hx|Core.hx|Debug.hx' str
  3    FROM dual
  4    )
  5  SELECT str, REPLACE(str, '|', chr(10)) str_newline FROM DATA
  6  /

STR                                                                 STR_NEWLINE
------------------------------------------------------------------- --------------------
Audio.hx|Camera.hx|Circle.hx|Color.hx|Component.hx|Core.hx|Debug.hx Audio.hx
                                                                    Camera.hx
                                                                    Circle.hx
                                                                    Color.hx
                                                                    Component.hx
                                                                    Core.hx
                                                                    Debug.hx


SQL>

PL/SQL接近

SQL> set serveroutput on
SQL> DECLARE
  2    v_str VARCHAR2(4000);
  3  BEGIN
  4    v_str:= 'Audio.hx|Camera.hx|Circle.hx|Color.hx|Component.hx|Core.hx|Debug.hx';
  5    dbms_output.put_line(REPLACE(v_str, '|', chr(10)));
  6  END;
  7  /
Audio.hx
Camera.hx
Circle.hx
Color.hx
Component.hx
Core.hx
Debug.hx

PL/SQL procedure successfully completed.

SQL>

希望对您有所帮助:

declare
    v_str varchar2(1000) := 'Audio.hx|Camera.hx|Circle.hx|Color.hx|Component.hx|Core.hx|Debug.hx|Draw.hx|Emitter.hx|Entity.hx|Events.hx|Game.hx|Input.hx|IO.hx|Log.hx|';
begin
    v_str := REPLACE(v_str,'|',CHR(10));

    DBMS_OUTPUT.PUT_LINE(v_str);
end;

顺便说一句,为什么要使用 CHR(13)?