我需要从不同的表中读取字段。表的名称写在另一个列中。
即: ENI_FLUSSI_HUB 有一个 FLH_TOUT_NAME 列。我想从 FLH_TOUT_NAME
中指定的表格中读取field1和field2我想过使用流水线功能。但我必须知道查询会返回的女巫字段..
我需要使用可以在SQL语句中调用的PL / SQL函数来解决问题。
答案 0 :(得分:1)
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;
答案 1 :(得分:0)
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;
/