2014-04-09 37 views
11

使用select語句可以獲取每個列的數據類型而不是值嗎?在ORACLE的select語句中獲取字段的數據類型

例如:

SELECT a.name, a.surname, b.ordernum 
FROM customer a 
JOIN orders b 
ON a.id = b.id 

和結果應該是這樣的

name | NVARCHAR(100) 
surname | NVARCHAR(100) 
ordernum| INTEGER 

,也可以是在這樣的行,這並不重要:

name   | surname  | ordernum 
NVARCHAR(100) | NVARCHAR(100) | INTEGER 

謝謝

+0

使用'desc table_name' – user3470953

回答

8

您可以查詢all_tab_columns在數據庫中查看。

SELECT table_name, column_name, data_type, data_length FROM all_tab_columns where table_name = 'CUSTOMER' 
+4

是的,但這不適用於像這樣的查詢:'SELECT a.name,a.surname,TO_CHAR(b.ordernum)as ordernum_char'。爲此,您必須使用包DBMS_SQL並使用顯式遊標。 –

+1

@WernfriedDomscheit一個具體的例子會受到歡迎。 – zeodtr

1

我來到了相同的情況。作爲一種解決方法,我只創建了一個view(如果您有權限)並描述並在稍後刪除它。 :)

+0

#NiceIdea這就是我需要的 –

3

我找到一個不直觀的方式使用dump()

SELECT DUMP(a.name), DUMP(a.surname), DUMP(b.ordernum)
FROM customer a
JOIN orders b
ON a.id = b.id

它會返回類似做到這一點: Typ=1 Len=2: 0,48爲每列

Type=1意味着VARCHAR2NVARCHAR2
Type=2意味着NUMBER/FLOAT
Type=12意味着DATE
and many ..
您可以參閱Oracle文檔這些 Datatype Code
也該有更詳細Oracle Type Code Mappings

0

我通常會創建一個視圖,並使用「遞減」命令:

CREATE tmp_view as SELECT a.name, a.surname, b.ordernum FROM customer a JOIN orders b ON a.id = b.id

然後,「DESC」命令將顯示每個字段的類型。

DESC tmp_view

0

如果您沒有權限在Oracle中創建一個視圖,一個「黑客」圍繞它使用的MS Access :-(

在MS Access中,通過與查詢創建通你的sql(但添加where子句只選擇1條記錄),從視圖創建一個選擇查詢(非常重要),選擇所有*,然後從select查詢中創建一個make表。當它運行時,它將創建一個表記錄,所有數據類型應該「匹配」oracle。 即passthrough - > Select - > MakeTable - >表

我相信還有其他更好的方法,但是如果你擁有有限的工具和特權,這將起作用。

0

另外,如果您有蟾蜍爲Oracle,可以突出語句,然後按CTRL + F9 你會得到列和數據類型的美景。