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_substr
和connect 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
您只需要将此逻辑合并到您的程序中即可。
我已经安装了 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_substr
和connect 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
您只需要将此逻辑合并到您的程序中即可。