大概您当前的查询正在获取ORA-00904: "CALLE": invalid identifier
,因为子查询没有名为CALLE
. 不幸的是,您不能在运行时为查询提供表名,而不得不求助于动态 SQL。
像这样的东西将遍历所有表,并且每个表都会CALLE
从每个表中获取所有值,然后您可以遍历这些值。我曾经DBMS_OUTPUT
显示它们,假设您在 SQL*Plus 中执行此操作或可以处理它的东西;但你可能想对他们做些别的事情。
set serveroutput on
declare
-- declare a local collection type we can use for bulk collect; use any table
-- that has the column, or if there isn't a stable one use the actual data
-- type, varchar2(30) or whatever is appropriate
type t_values is table of table.calle%type;
-- declare an instance of that type
l_values t_values;
-- declare a cursor to generate the dynamic SQL; where this is done is a
-- matter of taste (can use 'open x for select ...', then fetch, etc.)
-- If you run the query on its own you'll see the individual selects from
-- all the tables
cursor c1 is
select table_name,
'select calle from ' || owner ||'.'|| table_name as query
from all_tables
where owner = 'FMJ'
and table_name like 'BACKUP_SEMAFORO_GEO%'
order by table_name;
begin
-- loop around all the dynamic queries from the cursor
for r1 in c1 loop
-- for each one, execute it as dynamic SQL, with a bulk collect into
-- the collection type created above
execute immediate r1.query bulk collect into l_values;
-- loop around all the elements in the collection, and print each one
for i in 1..l_values.count loop
dbms_output.put_line(r1.table_name ||': ' || l_values(i));
end loop;
end loop;
end;
/