我希望能够确定表中列的数据类型。该数据库是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;
答案 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>';