Oracle REST 处理程序拆分负载

Oracle REST Handler Split Payload

我已经安装了 Oracle DB/ORDS 并按照基于 Oracle 的指南创建了所有处理程序和相关过程。有一个问题我没能解决,这看起来很简单,但我缺乏理解SQL阻碍了我。

当我批量发送 JSON 文件时,如下所示;

{"tenantId":"wjg79702","userSessionId":"JAFLA....\n
{"tenantId":"wjg79702","userSessionId":"SLPW....\n
\n

这将按预期插入所有记录。但我想将每条记录一条一条地插入到单独的 CLOB 列中。每条记录的末尾都有换行符。我如何通过将附加功能合并到我的处理程序或过程中来拆分它们?

处理程序

BEGIN
      create_kayit(p_kayit => :body_text);
END;

程序

create or replace PROCEDURE create_kayit (
p_kayit IN CLOB
)
AS
BEGIN
    INSERT INTO uemtest (kayit) VALUES (p_kayit);
EXCEPTION
    WHEN OTHERS THEN
        HTP.print(SQLERRM);
END;

编辑 解决方案奏效了。我正在分享最终代码以供将来参考。

CREATE OR REPLACE PROCEDURE create_kayit (p_kayit IN CLOB) AS
BEGIN
        INSERT INTO UEMTEST (KAYIT)
        SELECT
        REGEXP_SUBSTR(p_kayit, '.+', 1, level, 'm') KAYIT
        FROM DUAL connect by level <= length(REGEXP_REPLACE(p_kayit,'.+'));
EXCEPTION
    WHEN OTHERS THEN
        HTP.print(SQLERRM);
END;

回答你的评论,如果你想用return马车分开,一个选择可能是regexp_substrconnect by

例子

SQL> select  regexp_substr(to_clob('line 1
  2  line 2
  3  line 3') , '.+',1,level,'m') from  dual
  4  connect by level <= regexp_count( to_clob('line 1
  5  line 2
  6* line 3'), '.+',1,'m')
  7  /

REGEXP_SUBSTR(TO_CLOB('LINE1LINE2LINE3'),'.+',1,LEVEL,'M')
--------------------------------------------------------------------------------
line 1
line 2
line 3

您只需要将此逻辑合并到您的程序中即可。