Oracle의 이중 테이블은 무엇입니까?


229

사람들이이 표를 언급하는 것을 들었고 그것이 무엇인지 확실하지 않았습니다.


2
asktom.oracle.com/pls/asktom/… 이중에 대한 세부 사항
SriniV

가장 좋은 ANS는 모두 이중에 대해 여기 asktom.oracle.com/pls/asktom/... 사람들은 후회 실 거예요, 그것을 봐 가지고 ... 내가 여기에 주석하고 왜 위의 코멘트 링크에 더 많은 관심을주지 않고있다
Varun

답변:



79

요소가 하나 인 더미 테이블입니다. 오라클은 다음과 같은 문장을 허용하지 않기 때문에 유용합니다

 SELECT 3+4

다음과 같이 작성하여이 제한 사항을 해결할 수 있습니다.

 SELECT 3+4 FROM DUAL

대신에.


70

에서 위키 백과

역사

DUAL 테이블은 Oracle Corporation의 Chuck Weiss가 내부보기에 참여하기위한 테이블을 제공하기 위해 작성되었습니다.

Oracle Data Dictionary에서 DUAL 테이블을 기본 개체로 만들었습니다. 그 자체로 볼 수는 없었지만 쿼리가 예상되는 뷰 내부에서 사용되었습니다. 아이디어는 DUAL 테이블에 조인을 수행하고 결과를 테이블의 각 행마다 두 개의 행을 작성할 수 있다는 것입니다. 그런 다음 GROUP BY를 사용하여 결과 조인을 요약하여 DATA 익스텐트 및 INDEX 익스텐트의 스토리지 양을 표시 할 수 있습니다. DUAL이라는 이름은 단 하나의 행에서 한 쌍의 행을 작성하는 프로세스에 적합 해 보였습니다. 1

위에서 명확하지 않을 수도 있지만 원래 DUAL 테이블에는 두 개의 행이 있으므로 이름이 있습니다. 요즘에는 단 하나의 행만 있습니다.

최적화

DUAL은 원래 테이블이었으며 데이터베이스 엔진은 DUAL에서 선택할 때 테이블에서 디스크 IO를 수행합니다. 디스크 블록은 일반적으로 메모리에 이미 캐시되어 있으므로이 디스크 IO는 일반적으로 논리적 IO (물리적 디스크 액세스를 포함하지 않음)였습니다. 이로 인해 DUAL 테이블에 대해 많은 논리 IO가 발생했습니다.

이후 버전의 Oracle 데이터베이스가 최적화되었으며 DUAL 테이블이 실제로 존재하더라도 데이터베이스는 더 이상 DUAL 테이블에서 물리적 또는 논리적 IO를 수행하지 않습니다.


21

이 위키 백과 기사가 명확하게 도움이 될 것 같습니다.

http://en.wikipedia.org/wiki/DUAL_table

DUAL 테이블은 모든 Oracle 데이터베이스 설치에 기본적으로 존재하는 특수한 1 행 테이블입니다. SYSDATE 또는 USER와 같은 의사 열을 선택하는 데 적합합니다. 테이블에 값이 "X"인 DUMMY라는 단일 VARCHAR2 (1) 열이 있습니다.


10

오라클의 특별한 테이블입니다. 시스템 변수를 계산하거나 확인하는 데 자주 사용합니다. 예를 들면 다음과 같습니다.

  • Select 2*4 from dual 계산 결과를 인쇄합니다
  • Select sysdate from dual 서버의 현재 날짜를 인쇄합니다.

4

유사 테이블의 종류에 대해 명령을 실행하고 sysdate와 같은 결과를 얻을 수 있습니다. 또한 Oracle이 작동하는지 확인하고 SQL 구문을 확인하는 등의 작업을 수행합니다.


4

1 행 1 열만있는 Oracle의 유틸리티 테이블. 많은 산술 연산을 수행하는 데 사용되며 일반적으로 알려진 출력을 생성해야하는 경우에 사용할 수 있습니다.

SELECT * FROM dual;

여기에 표시된대로 "DUMMY"라는 단일 열과 "X"값이있는 단일 행이 제공됩니다.

DUMMY
----- 
X


2

DUAL 테이블은 모든 Oracle 데이터베이스 설치에 기본적으로 존재하는 특수한 1 행 테이블입니다. SYSDATE 또는 USER와 같은 의사 열을 선택하는 데 사용하기에 적합합니다.

테이블에 값이 "X"인 DUMMY라는 단일 VARCHAR2 (1) 열이 있습니다.

http://en.wikipedia.org/wiki/DUAL_table 에서 모든 내용을 읽을 수 있습니다 .


1

PL / SQL 개발에서 SQL에서만 사용할 수있는 함수를 사용하려면 DUAL이 필요합니다.

예 :

DECLARE
x XMLTYPE;
BEGIN
SELECT xmlelement("hhh", 'stuff')
INTO x
FROM dual;
END;

0

그 리턴 1 빈 행에 넣을 객체입니다. 예를 들어 : 이중에서 1을 선택하십시오. 1을 반환

이중에서 21 + 44를 선택하십시오. 65를 반환

이중에서 [sequence] .nextval을 선택하십시오. 시퀀스에서 다음 값을 반환합니다.


0

DUAL 주로 시퀀스에서 다음 숫자를 얻는 데 사용했습니다.

구문 : SELECT 'sequence_name'. NEXTVAL FROM DUAL

이것은 하나의 행에 하나의 열 값 (NEXTVAL 열 이름)을 반환합니다.


1
11g부터는 필요하지 않습니다. 시퀀스는 PL / SQL에서 기본적으로 사용할 수 있습니다.
Jon Heller

0

필요한 또 다른 상황 select ... from dual 은 내장 DBMS_METADATA.GET_DDL함수를 사용하여 다른 데이터베이스 객체 (예 : TABLE, FUNCTION, TRIGGER, PACKAGE)에 대한 코드 (데이터 정의)를 검색하려는 경우입니다 .

select DBMS_METADATA.GET_DDL('TABLE','<table_name>') from DUAL;

select DBMS_METADATA.GET_DDL('FUNCTION','<function_name>') from DUAL;

오늘날 IDE는 테이블의 DDL을 볼 수있는 기능을 제공하지만 SQL Plus와 같은 간단한 환경에서는 이것이 매우 유용 할 수 있습니다.

편집하다

보다 일반적인 상황 : 기본적으로 표준 SQL 문 내에서 PL / SQL 프로 시저를 사용해야하거나 명령 줄에서 프로 시저를 호출하려는 경우 :

select my_function(<input_params>) from dual;

두 조리법은 Josh Juneau와 Matt Arena의 'Oracle PL / SQL Recipes'책에서 발췌 한 것입니다.


0

DUAL은 모든 Oracle 데이터베이스에 기본적으로 존재하는 특수한 한 행, 하나의 열 테이블입니다. DUAL의 소유자는 SYS입니다.

DUAL은 Oracle Database가 데이터 기능과 함께 자동으로 생성 한 테이블입니다. 항상 운영 체제 기능 (날짜, 시간, 산술 표현 등)을 얻는 데 사용됩니다.

SELECT SYSDATE from dual;  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.