2013-01-23 32 views
2

如果我寫:顯示完整的列名,而不是縮短

Select DUMMY from DUAL; 

它如下顯示的真實:

D 
- 
X 

爲什麼是列名「d」在這裏嗎?爲什麼不是完整的「DUMMY」?我怎樣才能得到結果顯示如下?

Dummy 
----- 
    X 

上述問題現已解決。現在,如果我們想恢復默認值,會做什麼?

col dummy format a1; 
    insert into tab values('a'); 
    insert into tab values('ank'); 
    select * from tab; 

輸出爲:

D 
    - 
    a 
    a 
    n 
    k                 

這個 '假' 欄是不是從DUAL表。它是我自己創建的表格「標籤」。

回答

8

SQL * Plus會將列寬格式化爲數據類型的大小。在DUAL的情況下,DUMMY是一個varchar2(1)。你可以用

col DUMMY format a5 

即控制這樣的:

SQL> select * from dual; 

D 
- 
X 

SQL> col DUMMY format a5 
SQL> select * from dual; 

DUMMY 
----- 
X 
+0

感謝很多:) – ankitaP

+0

作爲參考,如果你是走樣的列名,那麼你需要設置別名的格式,而不是底層的列名。讓我感到困惑了一段時間,因爲我認爲在查詢運行之前它不會知道別名,但顯然它在某處已經定義了格式,並且只有在沒有定義的格式時纔會查找列別名(或名稱,如果沒有定義別名)是否恢復爲基礎數據的長度。 –

0

「作弊」

Select rpad('x', 5, ' ') DUMMY from DUAL 
/

SQL> 

DUMMY 
----- 
x 
+0

@Ben,你可能是指數據類型。啞元是雙重的varchar2。當你從雙重選擇*你選擇一個字符... – Art

+1

@Ben,在這兩種情況下返回的數據是字符。只是爲了澄清,因爲我仍然不確定我是否理解你的正確。只要我們能夠幫助那些詢問我的人,它並不重要......我的版本是一個快捷方式和「作弊」 - 無需在第一個答案中使用SQL +命令... – Art

+0

No @art; _datatypes_是相同的_data_不是。在第一種情況下,返回的數據僅爲「varchar2(1)」,「X」。在你的情況下,它是一個'varchar2(5)','X'右邊填充4個空格。 – Ben