JSON_ARRAYAGG에서 고유 값을 반환하는 방법
그래서 저는 별개의 단일 열 질의 결과를 JSON 배열에 넣어 웹 서버에서 사용할 수 있도록 하려고 합니다.다음과 같이 설정해 놓았습니다.
SELECT JSON_OBJECT(
'ArrayKey' VALUE JSON_ARRAYAGG( col )
) AS jsonResult
FROM(SELECT DISTINCT column_name AS col
FROM tbl_name);
그러나 이 쿼리가 결과를 반환할 때 JSON에서 생성하는 배열은 내 열의 모든 값을 포함하고 하위 쿼리의 DISTINCT 절을 무시합니다.JSON_ARRAYAGG 절을 제거하고 결과를 직접 출력할 때마다 결과는 고유하지만 명령어는 다시 추가하면 무시됩니다.또한 JSON_ARRAYAGG 내부에 DISTINCT 절을 다음과 같이 배치하려고 했습니다.
SELECT JSON_OBJECT(
'ArrayKey' VALUE JSON_ARRAYAGG( DISTINCT col )
) AS jsonResult
FROM(SELECT DISTINCT column_name AS col
FROM tbl_name);
헛되이배열이 고유 값이 아닌 모든 값을 출력하게 하는 내 코드에서 무엇이 잘못되고 있는지 아는 사람?
흥미로운...제가 보기엔 벌레 같은데요.옵티마이저가 너무 열심히 밀고 있는 것 같습니다.
이를 해결하기 위해 사용할 수 있습니다.NO_MERGE
서브쿼리의 힌트
SELECT /*+NO_MERGE(x)*/
json_object('ArrayKey'
VALUE json_arrayagg(column_name)) jsonresult
FROM (SELECT DISTINCT
column_name
FROM tbl_name) x;
ACTE와 AMATERIALIZE
힌트도 되는 것 같아요.
WITH cte
AS
(
SELECT /*+MATERIALIZE*/
DISTINCT
column_name
FROM tbl_name
)
SELECT json_object('ArrayKey'
VALUE json_arrayagg(column_name)) jsonresult
FROM cte;
이건 버그였어요, 우리가 고쳤어요.라이브 SQL에서 사용해 볼 수 있습니다.
create table tbl_name (column_name number);
insert into tbl_name values(1);
insert into tbl_name values(1);
insert into tbl_name values(2);
SELECT JSON_OBJECT(
'ArrayKey' VALUE JSON_ARRAYAGG( col )
) AS jsonResult
FROM(SELECT DISTINCT column_name AS col
FROM tbl_name);
{"ArrayKey" : [1,2]}
버그는 Bug 27757725 - JSON GENERATION AGENATION FECTESIGN DISTINCT 당신은 Oracle Support Services에 백포트를 요청할 수 있습니다.
나는 이 해킹이 효과가 있다는 것을 알았습니다.
SELECT JSON_OBJECT(
'ArrayKey' VALUE JSON_ARRAYAGG( col )
) AS jsonResult
FROM(SELECT DISTINCT column_name AS col
FROM tbl_name)
HAVING COUNT(*) = COUNT(*);
참고 항목:Oracle 버그가 JSON_ARRAYAGG에서 중복된 Aggregate 값을 생성함
언급URL : https://stackoverflow.com/questions/55736219/how-to-return-distinct-values-in-a-json-arrayagg
'programing' 카테고리의 다른 글
C 캐시 레벨 및 크기 결정을 위한 프로그램 (0) | 2023.10.16 |
---|---|
AJAX 로드된 콘텐츠에서 JQuery 스크립트 실행 (0) | 2023.10.16 |
새 파일을 포함하는 'git add --patch'? (0) | 2023.10.11 |
자바스크립트로 자릿수 가져오기 (0) | 2023.10.11 |
배경 이미지 CSS 확장? (0) | 2023.10.11 |