[SQL] 왜 wm_concat 여기에 작동하지 않는 이유는 무엇입니까?
SQL왜 wm_concat 여기에 작동하지 않는 이유는 무엇입니까?
나는이 쿼리를 가지고 :
(SELECT OBJECT_ID from cr_object_group_entries_vw where object_group_id IN
(SELECT ITEM FROM TABLE(CR_FN_SPLIT_STRING('28,56',','))))
반환하는 :
하지만 수행 할 때
SELECT wm_concat(object_id) FROM
(SELECT OBJECT_ID from cr_object_group_entries_vw where object_group_id IN
(SELECT ITEM FROM TABLE(CR_FN_SPLIT_STRING('28,56',','))))
나는 빈 결과를 얻을 ... 무슨 내가 잘못 뭐하는 거지?
해결법
-
==============================
1.이 문서화 및 Oracle 8i를 시간에 해결 방법으로 발견되기 때문에 기능 wm_concat하지 않도록해야합니다.
이 문서화 및 Oracle 8i를 시간에 해결 방법으로 발견되기 때문에 기능 wm_concat하지 않도록해야합니다.
톰 카이트에 의해 발견로 사용자 정의 집계 함수 오래된 방법의 배 때문에 여기에 아래의 예에서 보여 새로운 해결 방법이있다.
그들 모두는이 SQL 바이올린 재현.
해결 방법 1 - LISTAGG 기능은 11g에서 작동 :
select listagg(object_id,',') within group (order by rownum) id_string from cr_object_group_entries_vw
해결 방법 2 - SYS_CONNECT_BY_PATH은 10g부터 작동합니다 :
select id_string from ( select rn, substr(sys_connect_by_path(object_id, ','),2) id_string from (select object_id, rownum rn from cr_object_group_entries_vw) start with rn = 1 connect by prior rn + 1 = rn order by rn desc ) where rownum = 1
해결 방법 3 - XMLAGG은 10g부터 작동합니다 :
select replace( replace( replace( xmlagg(xmlelement("x",object_id)).getStringVal(), '</x><x>', ',' ), '<x>', '' ), '</x>', '' ) id_string from cr_object_group_entries_vw
추신 나는 정확히 모르고있는 오라클 버전은 sys_connect_by_path 및 XMLAGG 도입했지만, 모두 10.2.0.4.0에 잘 작동
-
==============================
2.경우에 당신은 스타터 11g의 시도의 LISTAGG 대신 wm_concat에있어.
경우에 당신은 스타터 11g의 시도의 LISTAGG 대신 wm_concat에있어.
-
==============================
3.난 그냥 wm_concat에 대한이 게시물을보고 몇 가지 정보를 공유하고 생각했다.
난 그냥 wm_concat에 대한이 게시물을보고 몇 가지 정보를 공유하고 생각했다.
wm_concat 기능에 의존하고 있었다 모든 응용 프로그램은 한 번 12C로 업그레이드 작동하지 않습니다. , 이후로는 최신 12C 버전에서 제거되었습니다. 오라클에 WM_CONCAT 기능을 사용하지 왜 보는가?
SQL> select banner from v$version where rownum = 1; BANNER ---------------------------------------------------------------------------- Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production SQL> SELECT object_name 2 FROM dba_objects 3 WHERE owner='WMSYS' 4 AND object_name LIKE 'WM\_%' ESCAPE '\'; OBJECT_NAME ---------------------------------------------------------------------------- WM_REPLICATION_INFO WM_RDIFF WM_PERIOD WM_PERIOD WM_OVERLAPS WM_MEETS WM_LESSTHAN WM_LDIFF WM_INTERSECTION WM_INSTALLATION WM_GREATERTHAN WM_EVENTS_INFO WM_ERROR WM_ERROR WM_EQUALS WM_DDL_UTIL WM_DDL_UTIL WM_CONTAINS WM_COMPRESS_BATCH_SIZES WM_COMPRESSIBLE_TABLES 20 rows selected.
"잘못된 식별자"오류가 발생합니다 :
SQL> SELECT banner FROM v$version; BANNER ---------------------------------------------------------------------------- Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production PL/SQL Release 12.1.0.1.0 - Production CORE 12.1.0.1.0 Production TNS for 64-bit Windows: Version 12.1.0.1.0 - Production NLSRTL Version 12.1.0.1.0 - Production SQL> SELECT deptno, wm_concat(ename) FROM emp; SELECT deptno, wm_concat(ename) FROM emp * ERROR at line 1: ORA-00904: "WM_CONCAT": invalid identifier
따라서, 더 이상 최신 버전에서 사용할 수 있습니다 문서화되지 않은 기능에 의존 아무 소용이 없다.
다른 솔루션의 경우, 오라클 문자열 집계 기법을 참조하시기 바랍니다
-
==============================
4.당신은 아무것도 잘못된 일을 할 나타나지 않습니다. 당신이 보여 데이터를 반환하기 위해 더미 테이블 기능으로, wm_concat은 나를 위해 일한 :
당신은 아무것도 잘못된 일을 할 나타나지 않습니다. 당신이 보여 데이터를 반환하기 위해 더미 테이블 기능으로, wm_concat은 나를 위해 일한 :
select wm_concat(object_id) from (select object_id from cr_object_group_entries_vw where object_group_id in (select item from table(cr_fn_split_string('28,56',',')))) / WM_CONCAT(OBJECT_ID) -------------------------------------------------------------------------------- 36,1,11,121,13,14,17,18,2,24,3,32,33,34,35,36,37,38,39,40,42,43,44,6,7,8,81
당신은 [11g] 같은 질문에 태그를 추가 한; 이 11gR2에서만 사용할 수 있지만 당신은 당신이 지원되지 않는 wm_concat 통해 지원 lisgagg를 사용해야 할 경우 @beherenow이 말한대로 나는 생각한다
select listagg(object_id, ',') within group (order by object_id) from cr_object_group_entries_vw where object_group_id in (select item from table(cr_fn_split_string('28,56',','))) / LISTAGG(OBJECT_ID,',')WITHINGROUP(ORDERBYOBJECT_ID) --------------------------------------------------------------------------- 1,11,121,13,14,17,18,2,24,3,32,33,34,35,36,36,37,38,39,40,42,43,44,6,7,8,81
SQL 바이올린 (- 어쩌면 인스턴스 중 하나를하지 않습니다, 그러나 그것은 오류해야 listagg 만, 그것은 wm_concat 지원하지 않기 때문에?)
from https://stackoverflow.com/questions/16674927/why-does-the-wm-concat-not-work-here by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 로그온을 생성 - SQL 사용자 이름으로 @parameter 사용할 수 없습니다 (0) | 2020.05.29 |
---|---|
[SQL] SQL 쿼리 테이블에 가입하기 (0) | 2020.05.29 |
[SQL] 부동 소수점으로 값을 캐스팅 할 수 없습니다 (0) | 2020.05.29 |
[SQL] 맞춤법의 차이와 유사한 단어를 인식하는 방법 (0) | 2020.05.29 |
[SQL] 오라클에서 밀리 초에 타임 스탬프 사이의 차이 (0) | 2020.05.29 |