[Developer] #424 fix ORDS JSON response output

This commit is contained in:
devmrko
2026-06-23 15:41:38 +09:00
parent 014e6eb3ec
commit 5032eed56a
2 changed files with 18 additions and 6 deletions

View File

@@ -83,6 +83,7 @@ BEGIN
p_source => q'! p_source => q'!
DECLARE DECLARE
v_rows_json CLOB; v_rows_json CLOB;
v_offset NUMBER := 1;
BEGIN BEGIN
cb_ords_handler_pkg.set_vpd_context(:auth_header); cb_ords_handler_pkg.set_vpd_context(:auth_header);
@@ -93,7 +94,7 @@ BEGIN
'owner_emp_no' VALUE owner_emp_no, 'owner_emp_no' VALUE owner_emp_no,
'dept_code' VALUE dept_code, 'dept_code' VALUE dept_code,
'contents' VALUE contents 'contents' VALUE contents
RETURNING CLOB RETURNING VARCHAR2(32767)
) )
ORDER BY doc_id ORDER BY doc_id
RETURNING CLOB RETURNING CLOB
@@ -107,14 +108,19 @@ BEGIN
:status_code := 200; :status_code := 200;
OWA_UTIL.MIME_HEADER('application/json', TRUE); OWA_UTIL.MIME_HEADER('application/json', TRUE);
HTP.P(JSON_OBJECT('rows' VALUE v_rows_json FORMAT JSON RETURNING CLOB)); HTP.P('{"rows":');
WHILE v_offset <= DBMS_LOB.GETLENGTH(v_rows_json) LOOP
HTP.P(DBMS_LOB.SUBSTR(v_rows_json, 32767, v_offset));
v_offset := v_offset + 32767;
END LOOP;
HTP.P('}');
cb_ords_handler_pkg.clear_vpd_context; cb_ords_handler_pkg.clear_vpd_context;
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
cb_ords_handler_pkg.clear_vpd_context; cb_ords_handler_pkg.clear_vpd_context;
:status_code := 403; :status_code := 403;
OWA_UTIL.MIME_HEADER('application/json', TRUE); OWA_UTIL.MIME_HEADER('application/json', TRUE);
HTP.P(JSON_OBJECT('error' VALUE SQLERRM RETURNING CLOB)); HTP.P(JSON_OBJECT('error' VALUE SQLERRM RETURNING VARCHAR2(4000)));
END; END;
!', !',
p_items_per_page => 0 p_items_per_page => 0

View File

@@ -168,13 +168,14 @@ public class OrdsMetadataService {
DECLARE DECLARE
v_limit NUMBER := LEAST(GREATEST(NVL(:row_limit, 50), 1), 500); v_limit NUMBER := LEAST(GREATEST(NVL(:row_limit, 50), 1), 500);
v_rows_json CLOB; v_rows_json CLOB;
v_offset NUMBER := 1;
BEGIN BEGIN
cb_ords_handler_pkg.set_vpd_context(:auth_header); cb_ords_handler_pkg.set_vpd_context(:auth_header);
SELECT JSON_ARRAYAGG( SELECT JSON_ARRAYAGG(
JSON_OBJECT( JSON_OBJECT(
%s %s
RETURNING CLOB RETURNING VARCHAR2(32767)
) )
RETURNING CLOB RETURNING CLOB
) )
@@ -191,14 +192,19 @@ public class OrdsMetadataService {
:status_code := 200; :status_code := 200;
OWA_UTIL.MIME_HEADER('application/json', TRUE); OWA_UTIL.MIME_HEADER('application/json', TRUE);
HTP.P(JSON_OBJECT('rows' VALUE v_rows_json FORMAT JSON RETURNING CLOB)); HTP.P('{"rows":');
WHILE v_offset <= DBMS_LOB.GETLENGTH(v_rows_json) LOOP
HTP.P(DBMS_LOB.SUBSTR(v_rows_json, 32767, v_offset));
v_offset := v_offset + 32767;
END LOOP;
HTP.P('}');
cb_ords_handler_pkg.clear_vpd_context; cb_ords_handler_pkg.clear_vpd_context;
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
cb_ords_handler_pkg.clear_vpd_context; cb_ords_handler_pkg.clear_vpd_context;
:status_code := 403; :status_code := 403;
OWA_UTIL.MIME_HEADER('application/json', TRUE); OWA_UTIL.MIME_HEADER('application/json', TRUE);
HTP.P(JSON_OBJECT('error' VALUE SQLERRM RETURNING CLOB)); HTP.P(JSON_OBJECT('error' VALUE SQLERRM RETURNING VARCHAR2(4000)));
END; END;
""".formatted(jsonEntries, selectColumns, object.owner(), object.objectName()); """.formatted(jsonEntries, selectColumns, object.owner(), object.objectName());
} }