EXTRACT 메서드를 사용하여 Oracle 11g 데이터베이스의 XML 형식 열에서 값을 추출했습니다. 내 표는 10 행, 내가oracle XMLTABLE이 예상대로 작동하지 않습니다.
반환 된 행에서'/Items/OperatingSystem/@Version[contains(.,"4.04")]'
같은 XPATH에서 어떤 조건을 넣으면 추출물 은 select 절에서 사용되는이있는 경우 XPATH 표현 인 경우
, 그것은 널을 보여줍니다 일치하지 않지만 모든 10 개의 행을 표시합니다.
그래서 XMLTABLE로 옮겨 가려고 시도 했으므로 최신 (EXTRACT가 사용되지 않음)임을 알았으므로 FROM 절에서 사용됩니다. 몇 가지 기본적인 쿼리를 시도하고 XPATH 식과 일치하는 행만 반환한다는 것을 알았습니다. (EXTRACT의 경우 null 행을 건너 뜁니다.)
XMLTABLE을 사용하여 발견 된 이상한 문제는 - 입니다.
'/Items/OperatingSystem/@Version[contains(.,"4.04")]'
결과에서 이름이 'Dee'인 행만 선택합니다. 나는 우리의 테스트 환경
에 대해 동일한 쿼리를 실행할 때
는하지만 그것은 단지 '디'을 포함 가진 이름을 선택하는 대신 모든 행을 선택합니다. 왜 이런 일이 발생하는지 전혀 알 수 없습니다. 나는 나이 등 다른 필드에 조건을 두는 더 적은 쿼리를 시도했지만 결과는 동일합니다. 모든 행을 반환합니다. 지역 Oracle 버전 - -
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
"CORE 11.2.0.2.0 Production"
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
테스트 환경 Oracle 버전 -
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
"CORE 11.2.0.3.0 Production"
TNS for HPUX: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
다음 버전에서 XMLTABLE 관련된 변화가
다음은 버전 정보이다.
샘플 데이터
가정하자 내가 가진 다음 표
NAME | XMLDATA | CRT_TS
Ubuntu | UbuntuXMLDATA | 20-OCT-2016
Windows | WindowsXMLDATA| 20-OCT-2016
UbuntuXMLDATA
<Items>
<OperatingSystem Name="Ubuntu 12.04" Version="12.04" />
<OperatingSystem Name="Ubuntu 14.04" Version="14.04" />
<OperatingSystem Name="Ubuntu 16.04" Version="16.04" />
</Items>
WindowsXMLDATA
<Items>
<OperatingSystem Name="Windows" Version="8" />
<OperatingSystem Name="Windows" Version="7" />
</Items>
테이블에서 위의 xml은 XMLDATA 열에 있습니다.
쿼리
select Name,rx.COLUMN_VALUE as XPATH_OUTPUT from Operating_System, XMLTABLE('/Items/OperatingSystem/@Version[contains(.,"4.04")]' PASSING XMLTYPE(XMLDATA)) rx where CRT_TS = 20-OCT-2016;
예상 결과
Name | XPATH_OUTPUT
Ubuntu | 14.04
실제 결과
Name | XPATH_OUTPUT
Ubuntu | 12.04
Ubuntu | 14.04
Ubuntu | 16.04
문제 나 facin하고 g 위의 쿼리가 내 로컬 데이터베이스에서 올바르게 작동합니다. 하지만 테스트 환경에 대해 하나가 아닌 3 개의 행이 반환됩니다. 나는 이유를 알 수 없다. Oracle 버전 (위의 세부 정보를 제공함) 불일치 때문입니까?
예기치 않은 데이터와 쿼리 및 예상치 못한 결과가 게시되어 있습니다. – Aleksej
@Aleksej 샘플 데이터를 제공했습니다. 당신이 도울 수 있는지 확인하십시오 –