2012-01-23 5 views
4

나는 다음과 같은 테이블이 : 나는 점의 수를 얻을 수있는 번호테이블에서 모든 Oracle VARRAY의 요소 수를 계산하는 방법은 무엇입니까?

의 VARRAY AS

TYPE의 SDO_ORDINATE_ARRAY (1048576) :

CREATE TABLE spatial_data (
    id NUMBER PRIMARY KEY, 
    geometry SDO_GEOMETRY); 

SDO_GEOMETRY는 다음과 같은 유형의 필드 sdo_ordinates있다 지정된 객체에 대해 :

select count(*) 
from table(
    select s.geometry.sdo_ordinates 
    from spatial_data s 
    where s.id = 12345 
); 

여러 객체에 대해 어떻게 계산합니까? 사용할 수 없습니다.

where s.id in (1, 2, 3, 4, 5) 

그리고 나는 성능에 대해 정말로 신경을 썼습니다. 어쩌면 PL/SQL이 올바른 선택일까요?

답변

6

난 당신이 하나 개의 쿼리와 함께 할 수 있다고 생각 :

select s.id, count(*) 
    from spatial_data s, table(s.geometry.sdo_ordinates) 
group by s.id 

하거나 SDO_ORDINATE_ARRAY VARRAY의 카운트 속성을 반환하는 PLSQL 간단한 기능을 쓸 수 있습니다 :

create or replace function get_count(ar in SDO_ORDINATE_ARRAY) return number is 
begin 
    return ar.count; 
end get_count; 

또는 더 좋은를 카운트 속성을 반환하는 SDO_GEOMETRY TYPE에 멤버 함수를 추가하십시오.

+0

@dmiandre - 내가 생각할 수있는 쿼리를 추가했습니다. –

+0

답장을 보내 주셔서 감사합니다! 필자는이 두 쿼리를 비교했으며 pl/sql 함수를 사용하는 두 번째 방법은 훨씬 빠르게 작동합니다. – dmiandre

관련 문제