暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将all_tables连接到普通表

ASKTOM 2019-02-08
4125

问题描述


是否可以加入ALL_TABLES和普通表?
我喜欢制作动态SQL并选择从列表中选择后显示的列。
像这样的东西:

select
*
from table1 a
where a.columns in (SELECT DISTINCT
A.COLUMN_NAME
FROM SYS.ALL_TAB_COLUMNS A
WHERE A.OWNER = 'ME'
AND A.TABLE_NAME = 'Table1'
AND A.COLUMN_NAME LIKE '%CONF%')

专家解答

当然,你可以加入all_tables到任何其他表/视图:

create table t as 
  select * from dba_objects;
  
select at。owner, count(*) 
from   all_tables at
join   t 
on     t。object_name = at。table_name
and    t。object_type = 'TABLE'
group  by at。owner;

OWNER               COUNT(*)   
APEX_040200                452 
MDSYS                      130 
CHRIS                       78 
OUTLN                        6 
CTXSYS                      53 
OLAPSYS                      2 
FLOWS_FILES                  1 
HR                           9 
SYSTEM                     182 
DVSYS                       36 
SCOTT                        4 
DBSNMP                      20 
GSMADMIN_INTERNAL           19 
OJVMSYS                      6 
ORDSYS                       5 
OE                          11 
PM                           2 
SH                          19 
APPQOSSYS                    4 
XDB                         29 
ORDDATA                     90 
IX                           8 
SYS                       1256 
WMSYS                       40 
LBACSYS                     22
复制


虽然我怀疑这不是你想做的。。。

在您的查询中:

select *
from table1 a
where a。columns in (SELECT DISTINCT
A。COLUMN_NAME
FROM SYS。ALL_TAB_COLUMNS A
WHERE A。OWNER = 'ME'
AND A。TABLE_NAME = 'Table1'
AND A。COLUMN_NAME LIKE '%CONF%')
复制


您正在获取我的列名列表。表1如 '% CONF %'。然后返回table1中存储这些值在table1。columns中的行。不是带有这些的列names

If you want to join based on the name of the column, you'll need dynamic SQL。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论