Oracle DB查询data_length(它返回什么)

时间:2011-08-11 15:10:42

标签: java database oracle

我正在从我的java程序运行Oracle DB上的一些查询。选择某个表后,此查询将运行并返回该用户的一些特征。

我的代码的简化版本如下。

String query = "SELECT column_name, data_type, data_length FROM all_tab_columns WHERE table_name = 'blahblah'";
String ColumnName;
String DataType;
String DataLength;

System.out.println(ColumName);
System.out.println(DataType);
System.out.println(DataLength);

我不确定data_length正在返回什么。

是否返回字段中的数据长度?或者是它返回最大值。经过一番搜索,我发现了相互矛盾的意见。当我将数据类型与其相关长度进行比较时,似乎它可能是最大长度但是谁知道该字段可能只是最大化了?

例如:

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

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

奖金:(最终成绩+5分,上课1分;

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

2 个答案:

答案 0 :(得分:8)

测试应该相对容易。请注意,没有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列中返回的长度。

答案 1 :(得分:0)

这应该表示使用。

创建列的长度

即。数字默认为22,但您可以覆盖该NUMBER(5)或其他内容。 varchar2(4000)等。

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

SELECT max( len( mycol )) from mytab;

可能会收集一些针对这些内容的统计信息,但这可能对您的应用程序不可靠。