2014-09-03 34 views
0

我試圖從一個複雜的查詢中使用自定義RECORD和TABLE OF RECORD數據類型來抽取數據(這裏簡化了這個查看),但是我不能由於「PLS-00308:該構造不允許作爲賦值的來源」錯誤,因此將數據導入表中。我仔細地看過這些例子,並不明白這個問題。任何人都可以指出我的方向。PL/SQL 11g>將數據導入到記錄表對象

這裏的代碼

TYPE CORE_REC IS RECORD 
     (
      OrgID CHAR(20 BYTE) 
      , StoreNumber VARCHAR2(200 BYTE) 
      , StoreName VARCHAR(200 BYTE) 
      , AssociateName VARCHAR2(300 BYTE) 
    ); 

TYPE CORE_REC_CURSOR IS REF CURSOR RETURN CORE_REC; 

TYPE CORE_REC_TABLE IS TABLE OF CORE_REC INDEX BY BINARY_INTEGER; 

    FUNCTION CORE_GETCURRS (
     OrgID IN CHAR 
) RETURN HDT_CORE_MAIN.CORE_REC AS 

CurrTable HDT_CORE_MAIN.CORE_REC; 
i BINARY_INTEGER := 0; 

CURSOR CurrCursor IS 
     WITH 
      CoreCurrs AS 
       (SELECT 
        busSTR.id AS OrgID 
        , busSTR.name AS StoreNumber 
        , busSTR.name2 AS StoreName 
        , emp.lname || ', ' || emp.fname || ' ' || emp.mname AS AssociateName 
        FROM tp2.tpt_company busSTR 
          INNER JOIN tp2.cmt_person emp 
           ON busSTR.ID = emp.company_id 
        WHERE 
          busSTR.id = OrgID 
       ) 
     SELECT 
      CoreCurrs.OrgID 
      , CoreCurrs.StoreNumber 
      , CoreCurrs.StoreName 
      , CoreCurrs.AssociateName 
      FROM CoreCurrs 
     ; 
BEGIN 
    DBMS_OUTPUT.ENABLE(1000000); 
    OPEN CurrCursor; 
    LOOP 
      i := i + 1; 
      FETCH CurrCursor INTO CurrTable(i); 
      EXIT WHEN CurrCursor%NOTFOUND; 
    END LOOP; 
    CLOSE CurrCursor; 
    RETURN CurrTable; 

    END CORE_GETCURRS; 

誤差會在FETCH語句拋出。

回答

1

你的變量是錯誤的類型,它應該是:

CurrTable HDT_CORE_MAIN.CORE_REC_TABLE; 

在你想選擇到記錄的一個元素,而不是一個表的元素的那一刻,不使感。當它被定義爲CORE_REC時,參考CurrTable(i)並不意味着什麼。

+0

是的......你完全正確......我修好了,它工作。謝謝,亞歷克斯! :) – rcfmonarch 2014-09-03 16:32:41