sql >> Database >  >> RDS >> Oracle

dynamische tabelnaam in select-statement

je kunt de ref-cursor gebruiken, maar ik zou het niet aanbevelen. Het gaat als volgt

create table tab_01 as select 1 a , 10 b from dual;
create table tab_02 as select 2 a , 20 b from dual;
create table tab_03 as select 3 a , 30 b from dual;

create or replace function get_all_history
return sys_refcursor
as
   r sys_refcursor;
   stmt varchar2(32000);
   cursor c_tables is
           select  table_name
           from    user_tables
           where   table_name like 'TAB_%';
begin
   for x in c_tables loop
           stmt := stmt || ' select * from ' || x.table_name ||' union all';
   end loop;
   stmt := substr(stmt , 1 , length(stmt) - length('union all'));
   open r for stmt;
   return r;
end;
/

SQL> select get_all_history() from dual;

GET_ALL_HISTORY()
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

         A          B
---------- ----------
         1         10
         2         20
         3         30


  1. table_exists() methode werkt mogelijk niet goed

  2. .nextval JDBC invoegprobleem

  3. Hoe SQL opvragen voor coördinaten die het dichtst bij een punt liggen?

  4. Fix Error "ORA-01789:queryblok heeft een onjuist aantal resultaatkolommen"