1

我需要从不同的表中读取字段。表的名称写在另一列中。

即:ENI_FLUSSI_HUB有一个FLH_TOUT_NAME列。我想从FLH_TOUT_NAME中指定的表中读取 field1 和 field2

我想使用流水线功能。但我必须知道查询将返回的女巫字段..

我需要使用可以从 SQL 语句中调用的 PL/SQL 函数来解决问题。

4

2 回答 2

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;
于 2012-10-12T15:53:53.027 回答
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;
/
于 2012-10-12T15:35:48.983 回答