Oracle获取列数据大小

时间:2011-02-12 17:38:57

标签: oracle types

我是Oracle数据库的新手,我想知道我是否可以找到数据类型和datasize ... 我的意思是:假设我在表“products”中有varchar2(20)类型的列“location”。 我能写一个会在结果“varchar2”和“20”中返回我的查询吗?

谢谢!

5 个答案:

答案 0 :(得分:25)

查看user_tab_columns

select data_type, data_length 
  from user_tab_columns
 where table_name = 'PRODUCTS'
   and column_name = 'LOCATION';

答案 1 :(得分:5)

您是否需要找出列的类型和大小以便理解数据,或者您是否正在编写需要在运行时了解的程序?

如果您只需要知道它,在SQLPlus中键入desc tablename将告诉您表中的列。

如果您需要以编程方式查找类型和大小,您使用的是哪种语言... PL / SQL?爪哇?

请注意,从USER_TAB_COLUMNS中选择只会列出您自己架构中的表中的列。对于其他表,您需要查看ALL_TAB_COLUMNS(或DBA_TAB_COLUMNS,如果DBA允许您访问它)。请注意,您的雇主或客户可能会禁止编译存储过程或程序包。

答案 2 :(得分:2)

SELECT CHAR_LENGTH FROM USER_TAB_COLUMNS WHERE TABLE_NAME = <TABLENAME> AND COLUMN_NAME = <COLUMNNAME>;     

答案 3 :(得分: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';

答案 4 :(得分:1)

我从sqlplus for oracle执行以下操作:

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

希望它也适合你!