Oracle에서 임시 테이블과 글로벌 임시 테이블의 차이점은 무엇입니까?
저는 이 두 용어 "임시 테이블"과 "글로벌 임시 테이블"이 비슷한 맥락에서 꽤 많이 사용되는 것을 들었습니다.
둘 사이의 차이점은 무엇입니까?
Oracle에는 차이가 없습니다.Oracle 데이터베이스에 임시 테이블을 작성할 때 해당 테이블은 자동으로 전역이며, "Global" 키워드를 포함해야 합니다.
용어 "GLOBAL TEMPORY TABLE"의 해석 방법을 정의하는 SQL 표준은 LOCAL 또는 GLOBAL 범위를 허용합니다.이렇게 하면 사용자별 테이블(LOCAL) 또는 모든 사용자(GLOBAL)를 사용할 수 있습니다.Oracle은 GLOBAL 버전만 구현합니다.
Oracle Temporary 테이블에 저장하는 데이터는 세션별로 다릅니다.즉, 100명의 사용자가 모두 동일한 테이블을 사용하는 경우에도 사용자만 데이터를 볼 수 있으며 테이블 설정에 따라 연결을 끊을 때(또는 현재 트랜잭션을 커밋할 때) 테이블에서 데이터가 삭제됩니다.
임시 테이블이 로컬인 MS SQL-Server와 비교해 보십시오.임시 테이블을 작성하면 사용자 이외의 사용자는 임시 테이블이 존재한다는 것을 알지 못합니다.Oracle에서 임시 테이블을 만들면 모든 사용자(스키마에 대한 액세스 권한이 있는 모든 사용자)가 테이블을 볼 수 있습니다.세션에서 로그아웃하면 SQL-Server 테이블이 삭제되므로 다음 세션에 대해 다시 만들어야 합니다.Oracle에서 임시 테이블은 데이터가 없더라도 스키마의 영구적인 부분입니다.
임시 테이블이 로컬인 MS SQL-Server와 비교해 보십시오.임시 테이블을 작성하면 사용자 이외의 사용자는 임시 테이블이 존재한다는 것을 알지 못합니다.Oracle에서 임시 테이블을 만들면 모든 사용자(스키마에 대한 액세스 권한이 있는 모든 사용자)가 테이블을 볼 수 있습니다.세션에서 로그아웃하면 SQL-Server 테이블이 삭제되므로 다음 세션에 대해 다시 만들어야 합니다.Oracle에서 임시 테이블은 이제 데이터가 아니더라도 스키마의 영구적인 부분이 됩니다(그렇지 않은 경우 보존 여부를 결정할 수 있습니다).Oracle은 글로벌 임시 테이블만 지원하므로 각 세션에서 테이블을 생성할 필요가 없습니다. 테이블은 '존재'하지만 비어 있고 내용은 세션별로 고유하며 비공개입니다.
글로벌 임시 테이블에는 관련된 통계가 없으므로 분석되지 않은 테이블이 구문 분석 시간에 샘플링되도록 인스턴스의 동적 샘플링 수준을 설정해야 하는지 여부를 조사합니다.그렇지 않으면 휴리스틱이 끔찍한 실행 계획으로 이어질 수 있습니다.
로컬 및 글로벌 임시 테이블에 대한 기존 답변에 추가하려면 다음과 같이 하십시오.Oracle 18c
진정한 "개인 임시 테이블"이 있을 것입니다.
개인 임시 테이블은 트랜잭션이나 세션이 끝날 때 자동으로 삭제되는 임시 데이터베이스 개체입니다.개인 임시 테이블은 메모리에 저장되며 이 테이블을 만든 세션에만 표시됩니다.
개인 임시 테이블은 임시 테이블의 범위를 세션 또는 트랜잭션으로 제한하므로 응용 프로그램 코딩의 유연성이 향상되어 코드 유지보수가 용이하고 사용하기 쉬운 기능을 제공합니다.
Oracle Live SQL의 데모: 18c 프라이빗 임시 테이블:
-- Private temporary tables must be prefixed as per the database parameter
-- 'private_temp_table_prefix'
create private temporary table ORA$PTT_MY_TT ( x int );
-- The table is truly private.
-- It does not even exist in the the data dictionary, only your session
-- By default, the moment you commit, the table ceases to exist
commit;
select * from ORA$PTT_MY_TT;
-- ORA-00942: table or view does not exist
-- This can be changed by specifying that the definition should be preserved
create private temporary table ORA$PTT_MY_TT ( x int )
on commit preserve definition;
insert into ORA$PTT_MY_TT
select rownum from dual
connect by level <= 30;
commit;
select count(*) from ORA$PTT_MY_TT;
-- 30
또한 Oracle(글로벌) temp table은 각 사용자/세션이 서로 다른 데이터 집합을 보아야 할 때 매우 유용합니다.글로벌 임시 테이블에 레코드를 삽입하고 Oracle이 한 사용자의 집합을 다른 사용자의 집합에서 보관하고 정리할 수 있도록 합니다.사용자 ID, 세션 ID 등으로 쿼리할 필요가 없습니다.
우리는 그것들이 매우 편리하다고 생각합니다.
임시 테이블은 없고 전역 임시 테이블만 있습니다.글로벌 임시 테이블의 개념은 정의가 존재하고 모두가 볼 수 있지만 각 세션에 대한 데이터는 비공개라는 것입니다.또한 데이터를 커밋할 때 치료할지 아니면 세션이 종료될 때만 치료할지 구성할 수 있습니다.
언급URL : https://stackoverflow.com/questions/417764/what-is-the-difference-between-a-temporary-table-vs-global-temporary-table-in-or
'programing' 카테고리의 다른 글
문자열을 16진수 바이트로 인쇄 (0) | 2023.06.11 |
---|---|
DateTimeFormat 옵션을 가져오는 방법 (0) | 2023.06.11 |
JavaScript를 사용한 ASP.NET 포스트백 (0) | 2023.06.11 |
WebAPI 컨트롤러에서 작업을 찾을 수 없습니다. (0) | 2023.06.11 |
Laravel + Vuex: 개체/인수 분해가 작동하지 않습니다. (0) | 2023.06.11 |