oracle提供了很多有用的子典表来保存表的基本信息,因为在一个项目中要用到动态获取指定表所有字段信息,所以在网上搜集了一下这几种方法:
首先创建一个用来测试的表,结构如下:
create table testTable(
userid integer,
username varchar2(20),
time_stamp date
)
第一种方法: 查询dba_tab_columns
select COLUMN_NAME,DATA_TYPE,DATA_LENGTH
from dba_tab_columns
where table_name =upper('testTable')
order by COLUMN_NAME
执行结果:
COLUMN_NAME DATA_TYPE DATA_LENGTH
-------------- ----------- -----------
TIME_STAMP DATE 7
USERID NUMBER 22
USERNAME VARCHAR2 20
这种方法需要有DBA权限
第二种方法: 查询user_tab_cols
select COLUMN_NAME,DATA_TYPE,DATA_LENGTH
from user_tab_cols
where table_name=upper('testTable')
order by COLUMN_NAME
执行结果:
COLUMN_NAME DATA_TYPE DATA_LENGTH
-------------- ----------- -----------
TIME_STAMP DATE 7
USERID NUMBER 22
USERNAME VARCHAR2 20
这种方法只能查找当前用户下的表
第三种方法: 查询ALL_TAB_COLUMNS
select distinct COLUMN_NAME,DATA_TYPE,DATA_LENGTH
from ALL_TAB_COLUMNS
WHERE TABLE_NAME= upper('testTable')
执行结果:
COLUMN_NAME DATA_TYPE DATA_LENGTH
-------------- ----------- -----------
TIME_STAMP DATE 7
USERID NUMBER 22
USERNAME VARCHAR2 20
这种方法可以查询所有用户下的表
oracle 在存储这些表的信息时,会把表名转换成大写方式,因此在条件中用upper()函数把表名字符转成大写方式
随然以上3中方法都可以查出指定表的字段基本信息(还有其他的更多信息),可以根据自己的需要灵活选择。