2013-03-15 4 views
2

여러 테이블에서 데이터를 선택하고 있으며 해당 테이블에서 최대 "타임 스탬프"를 가져와야합니다. 커스텀 캐시 컨트롤을 생성하려면이 기능이 필요합니다. 내가 설정 결과에 다음과 같은 정보를 추가 할 필요가SELECT에 집계 값을 추가하는 방법은 무엇입니까?

SELECT name, surname FROM tbl_name, tbl_surname WHERE tbl_name.id = tbl_surname.id 

과 : 내가 쿼리 다음 한

tbl_name  tbl_surname 
id | name id | surname 
--------- ------------ 
0 | John  0 | Doe 
1 | Jane  1 | Tully 
    ...   ... 

SELECT MAX(ora_rowscn) FROM (SELECT ora_rowscn FROM tbl_name 
UNION ALL 
SELECT ora_rowscn FROM tbl_surname); 

내가 UNION을 사용하려고했지만, 난이 오류가 얻을 - 혼합 그룹을 단일 그룹 데이터가 아니거나 그와 같은 것이 아니라면 왜 내가 노동 조합을 사용할 수 없는지 압니다.

캐시 관리를 위해 DB에서 가져온 현재 스냅 샷의 타임 스탬프가 필요하므로 2 번의 호출로 나누고 싶지 않습니다. 그리고 select와 MAX 사이의 호출 사이에서 DB가 변경 될 수 있습니다. 테이블 123456 마지막 변화의 대략적인 시간입니다

John | Doe | 123456 
Jane | Tully | 123456 

(삽입, 업데이트, 삭제는) tbl_name를하고 tbl_surname : 여기

내가 원하는 결과입니다.

난 DB에 읽기 전용 액세스, 그래서 나는 ... 어떤 제안에 대한

감사를 트리거, 저장 프로 시저, 별도의 테이블 등을 만들 수 없습니다.

EDIT : * ora_rowscn * 값은 행의 블록마다 지정됩니다. 따라서 한 테이블에서이 값은 행마다 다를 수 있습니다. 쿼리에 관련된 두 테이블 (모두)의 최대 값이 필요합니다.

답변

2

시도 : 응답에 대한

SELECT name, 
     surname, 
     max(greatest(tbl_name.ora_rowscn, tbl_surname.ora_rowscn)) over() as max_rowscn 
FROM tbl_name, tbl_surname 
WHERE tbl_name.id = tbl_surname.id 
+0

감사합니다. 지연되어 죄송합니다. 이제 귀하의 답변이 수락됩니다. – jnovacho

2

여기에 집계 할 필요가 없습니다 - 당신의 쿼리에서 모두 ora_rowscn 값을 포함하고 최대 걸릴 : BTW

SELECT 
    n.name, 
    n.ora_rowscn as n_ora_rowscn, 
    s.surname, 
    s.ora_rowscn as s_ora_rowscn, 
    greatest(n.ora_rowscn, s.ora_rowscn) as last_ora_rowscn 
FROM tbl_name n 
join tbl_surname s on n.id = s.id 

를, 내가 대체 한 기존의 스타일은 ANSI 스타일 조인 - 더 읽기, 이럴 .

+0

감사합니다. great()가 두 테이블 모두에서 최대 ora_rowscn을 선택할 것을 보장합니까? 저에게는 결과에서 행 당 최대 ora_rowscn이 걸리는 것처럼 보입니다. – jnovacho

+0

Greatest는 행당 최대 값을 반환합니다. 따라서 두 테이블 모두에 대해 최대 ora_rowscn을 원합니다 (모든 행에 대해 동일하게 나타남)? –

+0

두 테이블 모두에서 최대 값이 필요합니다. ora_rowscn의 문제점은 테이블의 행이 서로 다른 ora_rowscn 번호를 가질 수 있다는 것입니다. 이 번호는 여기에 설명 된 것처럼 테이블 당이 아닌 행 블록마다 할당되기 때문에 http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns007.htm 및 http://asktom.oracle.com/ pls/asktom/f? p = 100 : 11 : 0 ::: P11_QUESTION_ID : 517105100346104196 – jnovacho

관련 문제