Try this:
create table schema1.tableA
(field_1 char(1),
field_2 varchar(10));
insert into schema1.tableA
values ('A','table_10'),
('B','table_20'),
('C','table_30');
create table schema2.table_10
(field_1 dec(5,0));
insert into schema2.table_10
values (20), (30), (40);
create table schema2.table_20
(field_1 dec(5,0));
insert into schema2.table_20
values (6), (9), (12);
create table schema2.table_30
(field_1 dec(5,0));
insert into schema2.table_30
values (10), (15), (20);
with tmp (table_name, field_1) as (
select 'table_10', max(field_1) from schema2.table_10
union all
select 'table_20', max(field_1) from schema2.table_20
union all
select 'table_30', max(field_1) from schema2.table_30)
select a.field_1, b.field_1
from schema1.tableA a
join tmp b on b.table_name = a.field_2;
Wenn Sie zu viele Tabellen haben die oben genannten Arbeiten zu machen, können Sie eine benutzerdefinierte Funktion wie folgt verwendet werden:
create or replace function MaxNbr
(p_TableName varchar(128),
p_TableSchema varchar(128))
Returns dec(5,0)
language sql
not deterministic
no external action
reads sql data
returns null on null input
not fenced
begin
declare l_stmt varchar(1024);
declare l_table varchar(128);
declare l_schema varchar(128);
declare l_result dec(5,0);
set l_table = replace(upper(p_TableName),'"','');
set l_schema = replace(upper(p_TableSchema),'"','');
set l_stmt = 'values (select max(field_1) from "' || l_schema || '"."' ||
trim(l_table) || '") into ?';
prepare S1 from l_stmt;
allocate sql descriptor 'D1';
describe S1 using sql descriptor 'D1';
execute S1 into sql descriptor 'D1';
get sql descriptor 'D1' value 1 l_result = data;
deallocate sql descriptor 'D1';
return l_result;
end;
Dies ist erforderlich, da Sie eine Variable nicht für einen Bezeichner wie einen Tabellennamen oder einen Schemanamen verwenden können.
Um die benutzerdefinierte Funktion zu verwenden, können Sie etwas tun:
set schema schema1;
set path = udf_schema;
select field_1, MaxNbr(field_2, 'schema2') as field_2
from tableA;
Dank. Aber was kann ich tun, wenn SCHEMA_2 mehr als 3 Tabellen enthält? Zum Beispiel 50 Tabellen mit demselben Feld. – Asset
Sie müssen eine UDF schreiben, um die Menge aus einer Tabelle zu erhalten. Leider gibt es keine Möglichkeit, einen Tabellennamen als Variable zu codieren. – jmarkmurphy
Stellen Sie sicher, dass Sie vor einer Injektion schützen. – jmarkmurphy