Sql 在执行Oracle之前检查列是否存在

Sql 在执行Oracle之前检查列是否存在,sql,oracle,Sql,Oracle,我有疑问: SELECT Table_Name AS Table_Name, 'select count(*) from ' || Table_Name || 'where language!=0' AS Query FROM All_Tables WHERE Owner = 'databaseName' AND ( Table_Name LIKE 'HH%' OR Table_Name LIKE 'TT%' )

我有疑问:

 SELECT Table_Name   AS Table_Name,
        'select  count(*) from '
        || Table_Name
        || 'where language!=0' AS Query
   FROM All_Tables
  WHERE Owner = 'databaseName'
    AND ( Table_Name LIKE 'HH%'
     OR Table_Name LIKE 'TT%' )

但是,并非所有表都有列
语言
。如何检查该列是否存在,如果存在,则检查
语言

列名存储在
USER_TAB_列中
;通过
TABLE\u NAME
列将其与
USER\u TABLES
连接,例如

select *
from user_tables t join user_tab_columns c on t.table_name = c.table_name
正如您知道的表名一样,您应该能够检查某些列是否存在


如果使用
所有表
/
所有选项卡列
,则还包括
所有者
值。

列名存储在
用户选项卡列
;通过
TABLE\u NAME
列将其与
USER\u TABLES
连接,例如

select *
from user_tables t join user_tab_columns c on t.table_name = c.table_name
正如您知道的表名一样,您应该能够检查某些列是否存在


如果使用
所有表
/
所有选项卡列
,请同时包括
所有者
值。

要检查特定表中是否存在列,请使用:

  SELECT owner, table_name
  FROM all_tab_columns 
  WHERE UPPER(column_name) = UPPER(<your column _name>) and 
  TABLE_NAME=upper(<your table_name>);
选择所有者、表名称
从所有_选项卡_列
其中UPPER(列名称)=UPPER()和
表_NAME=upper();

要检查特定表中是否存在列,请使用:

  SELECT owner, table_name
  FROM all_tab_columns 
  WHERE UPPER(column_name) = UPPER(<your column _name>) and 
  TABLE_NAME=upper(<your table_name>);
选择所有者、表名称
从所有_选项卡_列
其中UPPER(列名称)=UPPER()和
表_NAME=upper();

您可以如下方式修改现有查询:

SELECT table_name AS Table_name,
       'select  count(*) from ' || table_name || ' where language!=0' as query
  FROM all_tables t
 WHERE t.owner = 'databaseName' 
   AND (t.table_name LIKE 'HH%' 
        OR t.table_name LIKE 'TT%')
   AND EXISTS (SELECT 1 
                 FROM all_tab_columns c 
                WHERE c.table_name = t.table_name
                  AND c.owner = t.owner
                  AND UPPER(c.column_name) = 'LANGUAGE')
如果有帮助,请告诉我

谢谢
Idrees

您可以如下方式修改现有查询:

SELECT table_name AS Table_name,
       'select  count(*) from ' || table_name || ' where language!=0' as query
  FROM all_tables t
 WHERE t.owner = 'databaseName' 
   AND (t.table_name LIKE 'HH%' 
        OR t.table_name LIKE 'TT%')
   AND EXISTS (SELECT 1 
                 FROM all_tab_columns c 
                WHERE c.table_name = t.table_name
                  AND c.owner = t.owner
                  AND UPPER(c.column_name) = 'LANGUAGE')
如果有帮助,请告诉我

谢谢
Idrees

您可以使用EXISTS子句修改现有查询。。查看下面我的答案。您可以使用EXISTS子句修改现有查询。。看看下面我的答案,谢谢!它只用于获取这些具有语言的表。是否可以用不同的查询将没有该列的数据连接起来?是的。。您可以在UNION子句中添加类似的查询,并使用其他条件LIKE<代码>选择条件1联合选择条件2谢谢!它只用于获取这些具有语言的表。是否可以用不同的查询将没有该列的数据连接起来?是的。。您可以在UNION子句中添加类似的查询,并使用其他条件LIKE<代码>选择条件\u 1联合选择条件\u 2