2008-09-16 37 views
191

Tôi đã nghe mọi người đề cập đến bảng này và không chắc nó là gì.Bảng kép trong Oracle là gì?

+1

http://asktom.oracle.com/pls/asktom/f?p=100:11:0 :::: P11_QUESTION_ID: 1562813956388 chi tiết về đôi – SriniV

Trả lời

190

Đó là một loại bảng giả với một bản ghi duy nhất được sử dụng để chọn khi bạn không thực sự quan tâm đến dữ liệu, nhưng thay vào đó lại muốn kết quả một số chức năng hệ thống trong một tuyên bố chọn:

ví dụ select sysdate from dual;

Xem http://www.adp-gmbh.ch/ora/misc/dual.html

+4

Một nguồn thông tin khác -> http://en.wikipedia.org/wiki/DUAL_table –

20

Tôi nghĩ bài viết wikipedia này có thể giúp làm rõ.

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

Bảng DUAL là một đặc biệt một hàng bảng hiện tại theo mặc định trong tất cả các cài đặt cơ sở dữ liệu Oracle . Nó phù hợp để sử dụng trong việc lựa chọn một pseudocolumn như SYSDATE hoặc USER Bảng này có một VARCHAR2 đơn (1) cột gọi là DUMMY mà có một giá trị của "X"

3

Kind của một bảng pseudo bạn có thể chạy lệnh chống lại và lấy lại kết quả, chẳng hạn như sysdate. Cũng giúp bạn kiểm tra xem liệu Oracle có lên và kiểm tra cú pháp sql hay không, vv

8

Đó là bảng đặc biệt trong Oracle. Tôi thường sử dụng nó để tính toán hoặc kiểm tra các biến hệ thống. Ví dụ:

  • Select 2*4 from dual in ra kết quả của việc tính toán
  • Select sysdate from dual in máy chủ ngày hiện tại.
52

Đây là bảng giả với một phần tử trong đó. Nó rất hữu ích bởi vì Oracle không cho phép báo cáo như

SELECT 3+4 

Bạn có thể làm việc xung quanh hạn chế này bằng cách viết

SELECT 3+4 FROM DUAL 

để thay thế.

+0

Đây là câu trả lời hay nhất. – johnny

0

Đó là một đối tượng để đưa vào từ đó trả về 1 hàng trống. Ví dụ: chọn 1 từ kép; trả về 1

chọn 21 + 44 từ kép; trả về 65

chọn [sequence] .textval from dual; trả về giá trị tiếp theo từ chuỗi.

2

Bảng DUAL là một bảng một hàng đặc biệt có sẵn theo mặc định trong tất cả các cài đặt cơ sở dữ liệu Oracle.Nó phù hợp để sử dụng trong việc lựa chọn một pseudocolumn như SYSDATE hoặc USER

Bảng này có một VARCHAR2 (1) cột duy nhất gọi là DUMMY mà có một giá trị của "X"

Bạn có thể đọc tất cả về nó trong http://en.wikipedia.org/wiki/DUAL_table

55

Từ Wikipedia

Lịch sử

bảng DUAL được tạo ra bởi Chuck Weiss của tập đoàn Oracle cung cấp một tabl e để tham gia vào chế độ xem nội bộ:

Tôi đã tạo bảng DUAL làm đối tượng cơ bản trong Từ điển dữ liệu Oracle. Nó không bao giờ có nghĩa là để được nhìn thấy chính nó, nhưng thay vào đó sử dụng bên trong một cái nhìn được dự kiến ​​sẽ được truy vấn. Ý tưởng là bạn có thể thực hiện JOIN với bảng DUAL và tạo hai hàng trong kết quả cho mỗi hàng trong bảng của bạn. Sau đó, bằng cách sử dụng GROUP BY, kết quả kết quả có thể được tóm tắt để hiển thị số lượng bộ nhớ cho mức DATA và cho (các) mức INDEX. Tên, DUAL, dường như thích hợp cho quá trình tạo một cặp hàng chỉ từ một. 1

Có thể không rõ ràng ở trên, nhưng bảng DUAL ban đầu có hai hàng trong đó (do đó tên của nó). Ngày nay nó chỉ có một hàng.

Tối ưu hóa

DUAL ban đầu là một bảng và cơ sở dữ liệu sẽ thực hiện đĩa IO trên bàn khi lựa chọn từ DUAL. IO đĩa này thường là hợp lý IO (không liên quan đến truy cập đĩa vật lý) vì các khối đĩa thường được lưu trong bộ nhớ. Điều này dẫn đến một lượng lớn IO hợp lý so với bảng DUAL.

Các phiên bản sau của cơ sở dữ liệu Oracle đã được tối ưu hóa và cơ sở dữ liệu không còn thực hiện IO hợp lý hoặc logic trên bảng DUAL mặc dù bảng DUAL vẫn thực sự tồn tại.

1

DUAL là cần thiết trong phát triển PL/SQL để sử dụng các hàm chỉ khả dụng trong SQL

ví dụ:

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

Một bảng tiện ích trong Oracle với chỉ 1 hàng và 1 cột. Nó được sử dụng để thực hiện một số phép toán số học và có thể được sử dụng nói chung nơi mà một trong những nhu cầu để tạo ra một đầu ra được biết đến.

CHỌN * TỪ kép;

sẽ cung cấp một hàng duy nhất, với một cột duy nhất có tên là "giả" và giá trị "X" như hình ở đây:

DUMMY 
----- 
X 
0

DUAL chúng tôi chủ yếu sử dụng để nhận được số tiếp theo từ các chuỗi.

Cú pháp: SELECT 'sequence_name'.NEXTVAL FROM DUAL

này sẽ trở lại với một hàng một giá trị cột (tên cột NEXTVAL).

+1

Điều đó không cần thiết kể từ 11g. Trình tự có thể được sử dụng nguyên bản trong PL/SQL. –

0

một tình huống đòi hỏi select ... from dual là khi chúng ta muốn lấy mã (định nghĩa dữ liệu) cho các đối tượng cơ sở dữ liệu khác nhau (như TABLE, CHỨC NĂNG, TRIGGER, GÓI), bằng cách sử dụng được xây dựng trong DBMS_METADATA.GET_DDL chức năng:

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

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

đúng là ngày nay các IDE cung cấp khả năng xem DDL của một bảng, nhưng trong các môi trường đơn giản hơn như SQL Plus, điều này có thể thực sự tiện dụng.

EDIT

một tình huống tổng quát hơn: về cơ bản, khi chúng ta cần phải sử dụng bất kỳ thủ tục PL/SQL bên trong một câu lệnh SQL chuẩn, hoặc khi chúng ta muốn gọi một thủ tục từ dòng lệnh:

select my_function(<input_params>) from dual; 

cả công thức nấu ăn được lấy từ cuốn sách 'Oracle PL/SQL Công thức' bởi Josh Juneau và Matt Arena

Các vấn đề liên quan