我正在从我的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分;
如何更改查询以获取我没有的数据。 (实际数据长度或最大数据长度)。
答案 0 :(得分:8)
测试应该相对容易。请注意,没有ALL_TABLE_COLUMNS
视图 - 有ALL_TAB_COLUMNS
和ALL_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;
可能会收集一些针对这些内容的统计信息,但这可能对您的应用程序不可靠。