无法确定Oracle中表列的数据类型

时间:2018-05-30 18:58:13

标签: sql oracle oracle11g

我希望能够确定表中列的数据类型。该数据库是Oracle 11。

我的查询如下:

"select t.data_type from user_tab_columns t where t.TABLE_NAME = '" + table.upper() + "' and t.COLUMN_NAME = '" + column.upper() + "'"

但由于某种原因,我没有找到user_tabl_columns中列出的table_name。

我用这个命令看到了表:

desc hr.t2

但是这个命令什么都找不到:

select unique table_name from user_tab_columns where table_name='hr.t2';

当我执行以下操作时,我没有看到它列出:

select unique table_name from from user_tab_columns;

当我执行以下操作时,我也没有看到它:

select unique table_name from all_tab_columns;

3 个答案:

答案 0 :(得分:1)

连接到HR,然后查询

select table_name 
  from user_tables 
 where table_name='T2'; 

如果你在这里看到你的表,那就意味着它存在,然后查询它的列,如下所示:

select column_name 
  from user_tab_columns 
 where table_name='T2'; -- where "table name" should be  in upper case letters

如果您看不到该表,并且您确定有一个名为T2的表,那么 您可以连接到SYS或SYSTEM模式,并查询如下:

select table_name 
  from dba_tables 
 where table_name='T2'; 

答案 1 :(得分:1)

当链接文章使用CREATE TABLE HR.T2时,会在T2架构中创建一个名为HR的表,而不是名为"HR.T2"的表。您需要在HR中找到它:

select data_type from all_tab_columns
where  owner = 'HR'
and    table_name = 'T2'

但是,由于ALL_视图仅显示您通过所有权或授权可以访问的内容,因此您仍然无法看到它。 HR是否允许您查询?以下显示HR已授予您的用户的内容:

select * from user_tab_privs_recd
where  grantor = 'HR';

或者,以HR身份连接并查询已授予其他用户的权限:

select * from user_tab_privs_made;

或者,如果您被授予访问DBA视图的权限:

select * from dba_tab_privs p
where  p.grantor = 'HR';

如果这只是一个演示,那么在应用程序连接的同一帐户中创建测试表是最简单的(尽管出于安全原因,这在实际系统中是不可取的)。这可能是HR或其他一些架构。

答案 2 :(得分:1)

Oracle对象名称通常为大写,除非它们被双引号括起来(例如hr."t2")。这不是这里的情况,因为您可以使用desc引用没有双引号的对象。由于该对象称为hr.t2,这意味着所有者/架构为HR,对象名称为T2。要查找T2中列的数据类型,可以使用:

SELECT data_type FROM all_tab_columns
 WHERE owner = 'HR'
   AND table_name = 'T2'
   AND column_name = '<whatever the column name is>';