경영진이 SQL Server 저장 프로 시저를 작성하도록 권장하는 C # 개발자는 종종 다음과 같은 절차를 생성합니다.
create table #t1 (...);
insert into #t1 Select ... from table_a where ...;
insert into #t1 Select ... from table_b where ...;
update #t1 Set ... = ... where ...
Select * from #t1;
단일 문장은 다소 단순하며이 방법으로 정확한 결과를 얻을 수 있습니다.
종종 내 임무는 그러한 절차를 Oracle로 마이그레이션하는 것입니다.
다음과 같은 사실에 직면합시다.
- SQL Server의 다른 임시 테이블은 완전히 독립적이며 임의의 임시 구조를 가질 수 있습니다.
- Oracle 글로벌 공통 테이블은 글로벌 오브젝트이며 모두 동일한 테이블 구조를 공유합니다. 이 구조를 수정하는 것은 불가능하지만 어디서나 사용됩니다.
Oracle dba에서 배운 것 중 하나는 가능할 때마다 임시 테이블을 사용하지 않는 것입니다. SQL Server의 성능조차도 그러한 수정의 이점을 얻습니다.
개별 인서트를 유니온으로 교체
가장 간단한 경우, 위의 내용은
select case when ... then ... end, ... from table_a where ...
union
select case when ... then ... end, ... from table_b where ...
Order by ...;
기능 사용
스칼라 함수와 테이블 반환 함수는 프로 시저를 위의 단일 쿼리로 변환하는 데 도움이 될 수 있습니다.
공통 테이블 표현식 (일명 서브 쿼리 팩토링)
서브 쿼리 팩토링은 임시 테이블을 피하기 위해 오라클이 제공해야하는 최고의 제품입니다. 이를 사용하여 SQL Server를 Oracle로 마이그레이션하는 것이 다시 쉽습니다. 이를 위해서는 SQL Server 2005 이상이 필요합니다.
이러한 수정 사항으로 인해 SQL Server 버전이 개선되고 많은 경우 마이그레이션이 간단 해집니다. 다른 경우에는 글로벌 임시 테이블에 의지하여 제한된 시간 내에 마이그레이션을 수행 할 수 있지만 만족스럽지 않습니다.
Oracle에서 전역 임시 테이블을 사용하지 않는 다른 방법이 있습니까?