2016-10-18 6 views
0

이내에 난 내가 그러나 내가UPDATE는이 그룹

SELECT element_id, 
    LISTAGG(cast(0 as varchar2(20))||', '|| VALUE, ' | ') WITHIN GROUP (ORDER BY display_order) 
FROM EDRN.MD$$_ELEMENT_VALUES 
WHERE element_id IN 
    (SELECT element_id FROM EDRN_NEW.DATA_DICTIONARY) 
GROUP BY element_id; 

내가으로 기본 변환을 수행 업데이트와 사투를 벌인거야와 다른 테이블을 업데이트하는 데 필요한 형식으로 데이터를 반환 아래의 문장을 작성한 사용 UPDATE 문

UPDATE EDRN_NEW.DATA_DICTIONARY 
SET Choices = (LISTAGG(CAST(0 AS VARCHAR2(20))||', '|| VALUE, ' | ') WITHIN GROUP (ORDER BY display_order) 
FROM EDRN.MD$$_ELEMENT_VALUES 
WHERE element_id IN 
    (SELECT element_id FROM EDRN_NEW.DATA_DICTIONARY) 
GROUP BY element_id); 

"ORA-00934 : 그룹 기능이 허용되지 않습니다"오류가 발생했습니다. 그룹 기능을 제거하는 방법을 모르지만 필요한 데이터 형식은 그대로 유지할 수 있습니까?

답변

1

listagg()을 사용하려면 부속 조회가 필요합니다. 이 경우 상관 된 하위 쿼리 :

update EDRN_NEW.DATA_DICTIONARY dd 
    set choices = (SELECT LISTAGG(cast(0 as varchar2(20))||', '|| VALUE, ' | ') WITHIN GROUP (ORDER BY display_order) 
        FROM EDRN.MD$$_ELEMENT_VALUES ev 
        WHERE ev.element_id = dd.element_id 
       ) 
    where exists (select 1 
        from EDRN.MD$$_ELEMENT_VALUES ev 
        where ev.element_id = dd.element_id 
       ); 
+0

감사합니다. Gordon – phemor