如何检查SQL中存在哪些列

时间:2016-08-29 17:14:49

标签: sql oracle exists

所以我有一个潜在列的列表,我知道我可以检查某个列是否存在使用。

SELECT null
  FROM user_tab_columns
  WHERE table_name = 'MYTABLE' and column_name = 'MYCOLUMN'

如何将其展开以测试多列?即不确定确切的语法是什么。

SELECT null, null, null
  FROM user_tab_columns
  WHERE table_name = 'MYTABLE' and column_name = 'MYCOLUMN' 
  or column_name = 'MYCOLUMN1' or column_name = 'MYCOLUMN2'

3 个答案:

答案 0 :(得分:1)

也许这段代码很有用(我确定必须有更好的解决方案):

select count(table_name) from all_tab_columns where column_name = 'YOUR_COLUMN';

对于多个colunm试试这个:

select count(table_name) from all_tab_columns where column_name in ( 'YOUR_COLUMN_1','YOUR_COLUMN_2')

如果表不存在,则返回0。

我希望对你有用

答案 1 :(得分:1)

在这里,我创建了一个包含单个列column_name的表。我在column_name架构中的表EMP中测试了SCOTT的存在。我假设所有表,列和模式名称都已经大写(因为所有目录字符串值都是大写的),否则您将需要不区分大小写的比较。此示例假定当前用户可以访问SCOTT模式(在大多数Oracle安装中找到的标准模式),并使用表ALL_TAB_COLUMNS而不是USER_TAB_COLUMNS(仅查看当前用户的表格。

with
     potential_columns ( column_name ) as (
       select 'EMPNO'   from dual union all
       select 'NAME'    from dual union all
       select 'MANAGER' from dual union all
       select 'DEPTNO'  from dual
     )
select p.column_name, 
       case when t.column_name is null then 'FALSE' else 'TRUE' end 
          as column_exists_in_table
from potential_columns p left outer join 
     (select column_name from all_tab_columns 
        where owner = 'SCOTT' and table_name = 'EMP') t
on p.column_name = t.column_name
;

COLUMN_NAME COLUMN_EXISTS_IN_TABLE
----------- ----------------------
EMPNO       TRUE 
DEPTNO      TRUE 
MANAGER     FALSE
NAME        FALSE

答案 2 :(得分:0)

现在你得到了正确的答案,来到你的查询它会执行类似下面的事情,因为AND的优先级高于Oracle SQL中的OR

SELECT null, null, null
  FROM user_tab_columns
  WHERE (table_name = 'MYTABLE' and column_name = 'MYCOLUMN')    <-- MYCOLUMN in MYTABLE
  or column_name = 'MYCOLUMN1'                                   <-- MYCOLUMN1 in ANYTABLE
  or column_name = 'MYCOLUMN2'                                   <-- MYCOLUMN2 in ANYTABLE