使用SQL Developer获取列大小时出现问题

使用SQL Developer获取列大小时出现问题,sql,oracle,Sql,Oracle,我试图编写一个查询,返回数据库中特定表中的列大小 我使用的是SQL开发人员环境,我是新手 我已经尝试了这个简单的代码,并将我在互联网上找到的应用于此: CREATE TABLE tab1 ( col1 VARCHAR2(15) PRIMARY KEY, col2 Number(4) NOT NULL) select data_type, data_length from user_tab_columns where table_name

我试图编写一个查询,返回数据库中特定表中的列大小

我使用的是SQL开发人员环境,我是新手

我已经尝试了这个简单的代码,并将我在互联网上找到的应用于此:

CREATE TABLE tab1 (
       col1      VARCHAR2(15) PRIMARY KEY,
       col2      Number(4) NOT NULL)

select data_type, data_length 
  from user_tab_columns
 where table_name = 'tab1'
   and column_name = 'col1';
我希望我的第二个查询得到这个:
VARCHAR2
15

但我明白了:

no data found

你知道我做错了什么吗?

你应该使用大写的标识符:

select data_type, data_length 
  from user_tab_columns
 where table_name = UPPER('tab1')   -- 'TAB1'
   and column_name = UPPER('col1'); -- 'COL1'

您可以使用带引号或不带引号的标识符来命名任何数据库对象。但是,数据库名称、全局数据库名称和数据库链接名称始终不区分大小写,并且存储为大写。如果将这些名称指定为带引号的标识符,则引号将自动忽略


真是太棒了!!谢谢大家!!
下一个问题见:D

尝试
'TAB1'
'COL1'
(使用大写字母)。除非表名和/或列名用双引号括起来(这是一种糟糕的做法),否则名称不区分大小写。但是,当写入字典表时,它们是用大写字母编写的,这就是查询字典表时必须使用它们的方式。在硬编码值周围使用
upper()
似乎太多了-为什么不简单地编写
'TAB1'
'COL1'
?这就是你查询目录表的方式吗?@mathguy,品味问题。它也可以是大写的字符串文字。