select SRI_PACK_INDEX_VAL
from (select TABLE_NAME
from all_tables
where table_name like '%SE_RAO_INDEX_04_12_2015%');
您好, 上面的查询在oracle中不起作用。任何人都可以帮我解决这个问题
答案 0 :(得分:1)
您无法从这样的表中动态选择,因为Oracle的解析器在获取之前无法弄清楚它需要知道哪些表需要读取。如果要进行动态提取,则需要执行动态sql。有点像(原谅任何轻微的语法错误 - 我现在远离我的数据库
declare
index_val number; -- i am assuming it is a number, change as appropriate
begin
-- I'm doing this in a loop if there are multiple tables that meet your name mask.
-- If there will only be one, then just select it into a variable and use it that way instead
for tab_name in (SELECT TABLE_NAME
from all_tables
where table_name like '%SE_RAO_INDEX_04_12_2015%')
loop
execute immediate 'select SRI_PACK_INDEX_VAL from '||tab_name.table_name
into index_val;
-- do your stuff with it
end loop;
end;
现在,如果select只返回一行,则可以正常工作。如果你带回多行,那么你必须以不同的方式处理它。在这种情况下,您要么想要执行一个pl / sql块并在那里嵌入您的结果处理,要么立即执行批量收集到一个数组an example on how to do that is here.
答案 1 :(得分:0)
select
extractvalue(
xmltype(
dbms_xmlgen.getxml(
'select sri_pack_index_val a from '||owner||'.'||table_name
)
), '/ROWSET/ROW/A'
) sri_pack_index_val
from all_tables
where table_name like '%SE_RAO_INDEX_04_12_2015%';
此查询基于Laurent Schneider的帖子。这是SQLFiddle演示。
这是在SQL中创建动态SQL的一个巧妙技巧,但它有一些潜在的问题。它可能不如Michael Broughton所示的典型动态SQL方法快。在尝试将其用于大型生产查询时,我遇到了一些奇怪的错误。
我建议仅使用此方法进行即席查询。