Bảng kép trong Oracle là gì?


229

Tôi đã nghe mọi người nhắc đến bảng này và không chắc nó là về cái gì.


2
Asktom.oracle.com/pls/asktom/ chi tiết về đôi
SriniV

Các ans tốt nhất là ở đây tất cả về kép asktom.oracle.com/pls/asktom/... , mọi người không đưa ra ý nhiều hơn đến các liên kết bình luận trên đó là lý do tại sao tôi đang bình luận ở đây .. có một cái nhìn vào nó, bạn wont hối tiếc
Varun

Câu trả lời:


229

Đó là một loại bảng giả với một bản ghi đượ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 đó muốn kết quả của một số chức năng hệ thống trong một câu lệnh chọn:

ví dụ select sysdate from dual;

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


79

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

 SELECT 3+4

Bạn có thể khắc phục hạn chế này bằng cách viết

 SELECT 3+4 FROM DUAL

thay thế.


70

Từ Wikipedia

Lịch sử

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

Tôi đã tạo bảng DUAL như một đố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, mà thay vào đó được sử dụng trong một khung nhìn dự kiến ​​sẽ được truy vấn. Ý tưởng là bạn có thể thực hiện THAM GIA với bảng DUAL và tạo hai hàng trong kết quả cho mỗi một hàng trong bảng của bạn. Sau đó, bằng cách sử dụng GROUP BY, phép nối kết quả có thể được tóm tắt để hiển thị dung lượng lưu trữ cho phạm vi DATA và cho phạm vi 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ông cụ cơ sở dữ liệu sẽ thực hiện đĩa IO trên bảng khi chọn từ DUAL. IO đĩa này thường là IO logic (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 logic 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 vật lý hoặc logic trên bảng DUAL mặc dù bảng DUAL vẫn thực sự tồn tại.


21

Tôi nghĩ rằng 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à bảng một hàng đặc biệt được hiển thị theo mặc định trong tất cả các cài đặt cơ sở dữ liệu của Oracle. Nó phù hợp để sử dụng trong việc chọn một bút danh như SYSDATE hoặc NGƯỜI DÙNG Bảng có một cột VARCHAR2 (1) được gọi là DUMMY có giá trị là "X"


10

Đó 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ả tính toán
  • Select sysdate from dual in ngày hiện tại của máy chủ.

4

Một loại bảng giả bạn có thể chạy các lệnh và lấy lại kết quả, chẳng hạn như sysdate. Cũng giúp bạn kiểm tra xem Oracle có hoạt động không và kiểm tra cú pháp sql, v.v.


4

Một bảng tiện ích trong Oracle chỉ có 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à thường có thể được sử dụng khi người ta cần tạo ra một đầu ra đã biết.

CHỌN * TỪ kép;

sẽ đưa ra một hàng đơn, với một cột có tên "DUMMY" và giá trị "X" như được hiển thị ở đây:

DUMMY
----- 
X


2

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

Bảng có một cột VARCHAR2 (1) được gọi là DUMMY có giá trị là "X"

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


1

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

ví dụ

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

0

Đó là một đối tượng để đặt trong đó 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ả lại 65

chọn [chuỗi] .nextval từ kép; trả về giá trị tiếp theo từ chuỗi.


0

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

Cú pháp: CHỌN 'Sequ_name'.NEXTVAL TỪ DUAL

Điều này sẽ trả về giá trị một hàng một 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.
Jon Heller

0

một tình huống khác đò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, FUNCTION, TRIGGER, PACKAGE), bằng cách sử dụng hàm dựng sẵn DBMS_METADATA.GET_DDL:

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 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.

BIÊN TẬP

một tình huống chung hơn: về cơ bản, khi chúng ta cần sử dụng bất kỳ thủ tục PL / SQL nào bên trong một câu lệnh SQL tiêu 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ả hai công thức đều được lấy từ cuốn sách 'Bí quyết Oracle PL / SQL' của Josh Juneau và Matt Arena


0

DUAL là một hàng đặc biệt, một bảng cột có mặt theo mặc định trong tất cả các cơ sở dữ liệu của Oracle. Chủ sở hữu của DUAL là SYS.

DUAL là một bảng được tạo tự động bởi Cơ sở dữ liệu Oracle cùng với các hàm dữ liệu. Nó luôn được sử dụng để có được các chức năng của hệ điều hành (như ngày, giờ, biểu thức số học, v.v.)

SELECT SYSDATE from dual;  
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.