Oracle11g 如何通过oracle中的select语句将值插入表类型?

Oracle11g 如何通过oracle中的select语句将值插入表类型?,oracle11g,Oracle11g,我是甲骨文的初学者。我创建的表类型如下所示: TYPE metertable IS TABLE OF pseb.metermaster.meterid%type; 我不知道如何将值插入到该表类型中。我需要将以下查询的整个结果集存储到表类型中 select distinct(meterid) from pseb.consumerfeedermetermapper where feederid in (select distinct (fm.FeederID)

我是甲骨文的初学者。我创建的表类型如下所示:

TYPE metertable IS TABLE OF pseb.metermaster.meterid%type;
我不知道如何将值插入到该表类型中。我需要将以下查询的整个结果集存储到表类型中

select  distinct(meterid) 
from pseb.consumerfeedermetermapper 
where feederid in (select distinct (fm.FeederID) 
                   from pseb.feedermaster fm,pseb.consumerfeedermetermapper cfm
                   where fm.substationid=v_v_type
                   and cfm.feederid=fm.feederid
                   and cfm.FeederID>0)
 and meterid >0
 order by meterid;

请帮助我完成此操作。

使用批量收集将数据选择到该类型的变量中:

declare
  mt metertable;
begin
  select  distinct(meterid) 
  bulk collect into mt
  from pseb.consumerfeedermetermapper 
  where feederid in (select distinct (fm.FeederID) 
                     from pseb.feedermaster fm,pseb.consumerfeedermetermapper cfm
                     where fm.substationid=v_v_type
                     and cfm.feederid=fm.feederid
                     and cfm.FeederID>0)
  and meterid >0
  order by meterid;

  -- Now use mt...
end;

我也有同样的问题,下面的代码帮助我:

SET SERVEROUTPUT ON
DECLARE
    TYPE t_bulk_collect_test_tab IS TABLE OF bulk_collect_test%ROWTYPE;
    l_tab     t_bulk_collect_test_tab;
    l_cursor  SYS_REFCURSOR;
BEGIN
    -- Way 1
    OPEN l_cursor FOR 'SELECT * FROM bulk_collect_test';
    FETCH l_cursor
    BULK COLLECT INTO l_tab;
    CLOSE l_cursor; 
    DBMS_OUTPUT.put_line('Dynamic FETCH  : ' || l_tab.count);


    -- Way 2
    EXECUTE IMMEDIATE 'SELECT * FROM bulk_collect_test' BULK COLLECT INTO l_tab;
    DBMS_OUTPUT.put_line('Dynamic EXECUTE: ' || l_tab.count);
END;
/

您可以使用上述代码

是否要插入从此查询中获取的数据?从pseb.feedermaster fm中选择distinctmeterid与pseb.ConsumerFeederMapper,其中feederid与pseb.feedermaster fm中选择DistinctFM.feederid,pseb.ConsumerFeederMapper cfm其中fm.substationid=v_v_type,cfm.feederid=fm.feederid和cfm.feederid>0和meterid>0,按meterid排序;
declare
type tab_type is table of consumerfeedermetermapper%rowtype;
tab_t tab_type;
begin

select  distinct(meterid) bulk collect into tab_t
from pseb.consumerfeedermetermapper 
where feederid in (select distinct (fm.FeederID) 
                   from pseb.feedermaster fm,pseb.consumerfeedermetermapper cfm
                   where fm.substationid=v_v_type
                   and cfm.feederid=fm.feederid
                   and cfm.FeederID>0)
 and meterid >0
 order by meterid;
 end;