다른 스키마에서 두 개의 테이블 쿼리
Oracle에는 두 개의 서로 다른 스키마(S1, S2)가 있고 해당 스키마에는 두 개의 테이블(S1)이 있습니다.표 1, S2.표 2).스키마 S1에서 이 두 테이블을 조회하고 싶습니다.
S1과 S2 둘 다 다른 데이터베이스에 있습니다.DB1 - 스키마 S1부터, 나는 이런 것을 하고 싶습니다,
select T1.Id
from S1.Table1 T1
, S2.Table2 T2
Where T1.Id = T2.refId
두 번째 스키마에 대한 DB Link를 만들어 쿼리에 사용하는 것도 한 가지 방법으로 알고 있습니다.안타깝게도 DB 링크를 만드는 데 필요한 권한이 없습니다.DB 링크 없이 할 수 있는 방법이 있습니까?예를 들어 TOAD에서는 두 스키마 개체를 비교할 수 있습니다.하지만 역시 두 개의 스키마 객체와 일반적인 비교입니다.
어떤 아이디어나 제안이라도 대단히 감사드립니다.미리 감사드립니다.
두 스키마가 동일한 데이터베이스에 있으면 데이터베이스 연결이 필요 없습니다.
S1에 S2.table2에 대한 SELECT 권한이 부여된 경우(dba 계정 또는 S2 스키마에서) 쿼리는 S1 스키마에서 작동해야 합니다.GRANT SELECT ON S2.Table2 TO S1
).
DB 링크는 여기 게임의 이름과 거의 유사합니다.자체적으로 작성할 수 없는 경우 사용할 수 있는 공용 DB 링크가 있는지 확인합니다.
또한 DBA가 DB Link 중 하나를 사용하여 S2의 구체화된 뷰를 생성할 수도 있습니다.S1 인스턴스의 표 2.
또 다른 옵션은 웹 서비스일 수도 있지만, 단순한 DB 링크를 사용하는 것보다 훨씬 더 많은 관리 문제에 직면하게 될 것입니다.링크가 없는 경우에만 해당 링크를 고려합니다(예: 데이터베이스 간 방화벽 구멍을 열지 않으려는 두 개의 개별 조직).
실패하면 정말 추한 영역에 들어가지만 뭔가를 해낼 수 있을지도 모릅니다.예를 들어,
- 여러 연결을 한 번에 읽을 수 있는 도구에서 둘 다 열고 거기서 조인을 합니다.접근.데이터 분석을 위한 두꺼비 같은 것 말입니다.
- Toad와 같은 도구를 사용하여 S2를 복사합니다.표 2 - 자신의 스키마("다른 스키마에서 만들기" 다음에 "데이터를 다른 스키마에 복사")
- 두 서버에서 정의된 상호 보완적인 디렉토리 객체가 있거나 얻을 수 있는 경우 S2에서 작성하고 S1에서 읽을 수 있는 디렉토리에 외부 테이블로 S2의 Materialized View를 작성합니다.
그러나 이러한 솔루션을 장기적으로 유지하고 싶지는 않을 것입니다.
CREATE DATABASE LINK 문을 사용하여 데이터베이스 링크를 만듭니다.데이터베이스 링크는 다른 데이터베이스의 개체에 액세스할 수 있게 해주는 하나의 데이터베이스의 스키마 개체입니다.
약간 주제가 틀리지만 새로운 조인 구문을 사용하는 것이 좋습니다.
SELECT
T1.Id
FROM S1.Table1 T1
INNER JOIN S2.Table2 T2 ON T1.Id = T2.refId
모든 조인 조건은 "ON" 절에 나타나고 필터 조건은 "WHERE"에 나타납니다.
이 새로운 스타일은 왼쪽/오른쪽 조인을 읽고 이해하기 쉽게 만듭니다.또한 Oracle에 대해 잘 알지 못하지만(작업한지 여러 해가 지났습니다) SQL Server의 경우 보기를 사용한 쿼리에서 기존 조인 스타일과 새로운 조인 스타일이 함께 혼합되는 문제가 발생했습니다.
이 기능이 프로덕션 코드의 일부로 필요한지, 아니면 일회성 분석을 수행하기 위해 두 테이블을 결합하려고 하는지는 지정하지 않습니다.후자인 경우 Microsoft Access를 사용하여 두 데이터베이스에 연결된 테이블이 포함된 로컬 mdb 파일을 만든 다음 두 테이블을 참조하는 로컬 액세스 쿼리를 작성할 수 있습니다.그런 다음 해당 MDB를 다양한 보고 도구의 데이터 소스로 사용할 수 있습니다.
쿼리가 네이티브 Oracle db 링크만큼 인덱스를 효율적으로 사용하지는 않겠지만 없는 것보다는 낫습니다.
edit: 신경쓰지 마세요 - 위에서 이미 제안한 내용입니다.
JDBC를 통해 다른 데이터베이스에 연결하고 다른 데이터베이스에서 선택을 실행하는 자바 저장 프로시저를 만들 수 있습니다.자바 저장 프로시저는 컬렉션을 반환해야 합니다.할 수 방법은select from table(...)
테이블을 자신의 데이터베이스에 저장할 수 있습니다.
대략 비슷한 솔루션은 여기를 참조하십시오.
코딩을 많이 해야 하고 자바 저장 프로시저를 위한 pl/sql 래퍼를 만들어야 하기 때문에 이 방법은 느리고 복잡할 것 같습니다.
데이터베이스 링크를 만드는 것이 좋습니다.
언급URL : https://stackoverflow.com/questions/980620/query-two-tables-from-different-schema
'programing' 카테고리의 다른 글
워드프레스의 특정 카테고리 아래에 (미디어 라이브러리에서) 이미지를 표시하는 방법? (0) | 2023.10.07 |
---|---|
안드로이드 스튜디오의 외부 라이브러리에 항아리를 추가하는 방법은? (0) | 2023.10.07 |
모듈이 개체가 할 수 있는 것과 동일한 속성을 가질 수 있습니까? (0) | 2023.10.07 |
여러 테이블에서 하나의 쿼리에 여러 개의 완전한 조인 (0) | 2023.10.07 |
Null이거나 JavaScript에서 정의되지 않은 경우 값 바꾸기 (0) | 2023.10.07 |