2016-11-14 2 views
-1

동일한 서버 (dbA 및 dbB)에 두 개의 데이터베이스가 있습니다. 둘 다 CUSTOMERS라는 테이블이 있습니다. 고객의 나이를 계산하여 dbA.CUSTOMERS 테이블의 현재 날짜와 DateOfBirth 열을 기준으로 dbB.CUSTOMERS 열에서 AGE 열에 가져 오려고합니다. 오라클 SQL에서 연령을 계산하는 방법

내가

SELECT floor(months_between(SYSDATE, (SELECT BIRTH_DATE FROM dbA.CUSTOMERS)) /12) from dual; 

를 사용하려고 나이를 계산하려면 그러나 이것은 내가이 추측하고 ORA-01427:single-row subquery returns more than one row

를 반환하는 하위 쿼리가 반환하는 BIRTH_DATE 열의 모든 행 때문이다. 거기에 모든 행에 대해 이렇게하고 내 dbB.CUSTOMERS 테이블에 결과를 삽입 할 someway 있나요? 내가 OracleSQL

을 사용하고

+2

왜? 나이는 시간이 지남에 따라 변합니다. 필요한 경우 건물을 짓고 함수를 호출하는 것이 좋습니다. 결정적이라면 함수 기반 인덱스를 사용할 수 있습니다. 그러나 이것은 결정론 적이 지 않습니다. 그래서 다시 왜입니까? 기능이 나을 것 같아요. – xQbert

+0

@xQbert 이것은 운동을위한 것으로, 시간 경과에 따라 변하는 나이는 부적합합니다. – Akaitenshi

+2

매우 열악한 운동을 선택했습니다. 강사가 시연 (또는 테스트)하려고 시도하는 모든 것이 현실 세계에서 실제로하는 것과 유사한 더 나은 예를 선택해야합니다. 이 과제는 현실 세계에서 꽤 바보 스럽습니다. 테이블에 연령을 저장하는 것이 어떻게 든 의미가 있음을 암시하거나 암시하지 않고도 똑같은 기능, 기술 등을 정확히 보여주는 의미있는 과제를 제시하는 것은 매우 쉽습니다. 그냥 내 2 센트 ... – mathguy

답변

1

하위 쿼리 반환 모든 행 테이블에 대한 그들 모두에 대해 기능을 적용 할 수 없습니다를 사용하여 여기에 하위 쿼리

select floor(months_between(sysdate,BIRTH_DATE)/12) as Age 
from CUSTOMERS 

필요가 없습니다. 이 메서드는 각 행에 대해 함수를 적용하므로 작동합니다.

+0

와우 그것은 그렇게 간단했습니다. 다른 DB에서 열을 가져 오려면 하위 쿼리가 필요하다고 생각했습니다. 고맙습니다. – Akaitenshi

관련 문제