異なるテーブルからフィールドを読み取る必要があります。別の欄にはテーブルの名前が書かれています。
つまり: ENI_FLUSSI_HUBにはFLH_TOUT_NAME列があります。FLH_TOUT_NAMEで指定したテーブルからfield1とfield2を読み込みたい
パイプライン関数を使用することを考えました。しかし、クエリが返す魔女のフィールドを知っている必要があります..
SQL ステートメント内から呼び出すことができる PL/SQL 関数を使用して問題を解決する必要があります。
declare
TYPE ref_cursor IS REF CURSOR;
c_cursor ref_cursor;
--Declare variables stmt, fld1, fld2
begin
FOR c_rec in (SELECT FLH_TOUT_NAME
from ENI_FLUSSI_HUB) --For multiple tables
LOOP
stmt := 'SELECT field1, field2 FROM '|| c_rec.FLH_TOUT_NAME;
open c_cursor for stmt;
LOOP --For multiple rows in table c_rec.FLH_TOUT_NAME
FETCH c_cursor INTO fld1, fld2;
exit when c_cursor%notfound;
dbms_output.put_line ('Table='||c_rec.FLH_TOUT_NAME||' Field 1 ='||fld1||' Field 2='||fld2);
END LOOP;
END LOOP;
...
...
exception
...
...
end;
declare
TYPE cur_typ IS REF CURSOR;
c cur_typ;
query_str VARCHAR2(1000);
l_tablename VARCHAR2(20);
l_field1 VARCHAR2(20);
l_field2 VARCHAR2(20);
BEGIN
--this assumes only 1 row in ENI_FLUSSI_HUB, if there are more, then use a cursor
select FLH_TOUT_NAME
into l_tablename
from ENI_FLUSSI_HUB;
query_str := 'SELECT field1, field2 FROM ' || l_tablename;
OPEN c FOR query_str;
LOOP
FETCH c INTO l_field1, l_field2;
EXIT WHEN c%NOTFOUND;
dbms_output.put_line('Field1: ' || l_field1);
dbms_output.put_line('Field2: ' || l_field2);
END LOOP;
CLOSE c;
END;
/