2011-08-11 69 views
2

我正在从我的java程序运行Oracle数据库的一些查询。一旦选择了某个表,该查询就会运行并返回用户的一些特征。Oracle数据库查询data_length(它返回什么)

我的代码的简化版本如下。我不确定data_length正在返回什么状态。

它是否返回字段中的数据长度?或者它返回最大值。经过一番搜索后,我遇到了相互矛盾的观点。当比较我获得的数据类型和相关的长度时,似乎它可能是最大长度,但是谁知道这个字段可能是最大的?

例如:

Data Type = Number正在返回Data Length = 22

Data Type = VARCHAR2正在返回Data Length = 2000

加成:(上最终级5分,和1个自由缺席类)

如何更改查询以获取我没有的数据。 (实际数据长度或最大数据长度)。

+3

哈哈哈哎。尽管我自己的奖金问题有一些聪明的措辞(我发现这很有趣),但这并不是家庭作业。 – sealz

回答

7

应该比较容易测试。请注意,没有ALL_TABLE_COLUMNS视图 - 存在提供此信息的ALL_TAB_COLUMNSALL_TAB_COLS视图。我将创建一个空表并运行我假设你的教授打算的查询。

SQL> create table empty_table (
    2 col1 number(10,2), 
    3 col2 varchar2(100), 
    4 col3 varchar2(100 byte), 
    5 col4 varchar2(100 char) 
    6 ); 

Table created. 

SQL> select column_name, data_type, data_length 
    2  from all_tab_columns 
    3  where table_name = 'EMPTY_TABLE' 
    4 order by column_name; 

COLUMN_NAME     DATA_TYPE  DATA_LENGTH 
------------------------------ -------------- ----------- 
COL1       NUMBER     22 
COL2       VARCHAR2    100 
COL3       VARCHAR2    100 
COL4       VARCHAR2    300 

现在,你已经看到了实际效果,应该很清楚在DATA_LENGTH列正在返回什么长度。

+0

ahh正确,我的实际代码使用all_tab我将编辑。猜猜我有一会儿哈哈。 – sealz

+0

我想我已经明白了,所以为了清楚这两个答案之间的区别,这是该领域可容纳的最大允许量?不是它创建的最大量? – sealz

+0

@ harper89 - 我不确定你的意思是“最大创建数量”。 'ALL_TAB_COLUMNS'告诉你该列创建时声明的最大大小。它不会告诉你任何有关在创建表后插入该列的数据。 –

0

这应该表示列创建的长度。

即数字默认为22,但您可以重写该数字(5)或其他。 varchar2(4000)等

为了找到包含在列中的值的实际最大长度,您需要查询表本身,而不是数据字典。

SELECT max(len(mycol)) from mytab; 

可能会收集这些事情的一些统计数据,但这可能不适合您的应用程序。

+0

@downvoter - 谨慎解释?谢谢。 – Randy

+0

“数字默认为22,但您可以覆盖该数字(5)”数据长度不精确。 'create table t(n number(5));''从all_tab_columns中选择column_name,data_length,其中table_name ='T';'返回数据长度为22. –