2011-02-12 71 views
7

我是新來的Oracle數據庫,我不知道我能否找出數據類型和數據大小... 我的意思是:比方說,我有列「位置」類型varchar2(20)在表「產品」中。 我可以寫一個查詢,返回結果「varchar2」和「20」嗎?Oracle獲得列數據大小

謝謝!

回答

19

結帳user_tab_columns

select data_type, data_length 
    from user_tab_columns 
where table_name = 'PRODUCTS' 
    and column_name = 'LOCATION'; 
1
SELECT CHAR_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = <TABLENAME> AND COLUMN_NAME = <COLUMNNAME>;  
+0

我忘了在Select子句中添加DATA_TYPE。 – Ketan 2011-02-12 18:31:19

5

你需要找出一個列的類型和大小的理解數據的目的,或者是你編寫需要知道它在運行的程序?

如果您只需要知道它,SQLPlus中輸入desc tablename會告訴您有關表中的列。

如果您需要以編程方式查找類型和大小,您使用的是什麼語言... PL/SQL? Java的?

請注意,從USER_TAB_COLUMNS中選擇將只列出您自己的模式中表中的列。對於其他表,您需要查看ALL_TAB_COLUMNS(或DBA_TAB_COLUMNS,如果DBA允許您訪問它)。請注意,您的僱主或客戶可能會禁止存儲的程序或程序包針對其進行編譯。

1

這個問題的答案對我很有用。但是,當列類型爲NVARCAHR2時,在獲取data_length時需要考慮一個重要區別。返回的NVARCHA2列的data_length加倍。

這是由於使用的字符編碼。 Oracle documentation說:

的字節數可以是最多兩次大小AL16UTF16 編碼和三倍大小UTF8編碼。

因此,理想的查詢將是以下幾點:

select table_name, column_name, 
data_type, NVL(char_col_decl_length, data_length) 
from user_tab_columns where table_name='T51_NOCOMP'; 
1

我從SQLPLUS以下對於Oracle:

SELECT COLUMN_NAME,DATA_TYPE,DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_NAME = 'YOUR';

希望你的作品呢!