2016-07-29 14 views
0

Was ich tun möchte, ist, in einer Funktion befülle ich eine Tabelle (mit einem benutzerdefinierten Typ) und dann eine Auswahl dieser Tabelle.Inhalt abrufen o benutzerdefinierte Tabelle

Ich tat, wie folgt:

1/definieren die benutzerdefinierte Typ:

create or replace TYPE "MVT_CD" AS OBJECT 
( 
    ACCOUNTPK NUMBER(19,0), 
    ACCOUNTCODE VARCHAR2(255) 
) 

2/Definieren Sie eine Tabelle dieser Art

create or replace TYPE "MVT_TAB_CD" AS TABLE OF MVT_CD 

3/My Funkt Deklarieren

create or replace FUNCTION OUTPUT_CD (BUS_DAY VARCHAR2, CODE_AGENCE VARCHAR2) RETURN CD_OUTPUT_TABLE AS 
    RETVAL CD_OUTPUT_TABLE := CD_OUTPUT_TABLE(); 
    ...  
    MVT_TAB MVT_TAB_CD := MVT_TAB_CD(); 
    ... 

BEGIN 

    MVT_TAB.EXTEND; 
    MVT_TAB(MVT_TAB.COUNT) := MVT_CD(123, ' '); 

    MVT_TAB.EXTEND; 
    MVT_TAB(MVT_TAB.COUNT) := MVT_CD(456, ' '); 

    FOR I IN (
      SELECT ACCOUNTPK, ACCOUNTCODE FROM MVT_TAB 
    )LOOP 
    RETVAL.EXTEND; 
    RETVAL(RETVAL.COUNT) := I.ACCOUNTPK|| I.ACCOUNTCODE; 
    END LOOP; 
    ... 
END 

Die Variab le, dass ich verwendet habe, heißt: MVT_TAB, und ich möchte eine Auswahl treffen, um sein containt abzurufen und das Letztere in einem anderen Teil meiner Funktion zu verwenden.

Wenn ich versuche mich zu Comile hatte: ORA-000942 an der Linie:

SELECT ACCOUNTPK, ACCOUNTCODE FROM MVT_TAB 

Ich dachte über BULK COLLECT verwenden, aber ich weiß nicht, ob ich in dem guten Weg bin.

Antwort

0

Sie müssen lediglich Ihre Struktur als Tabelle werfen:

SELECT ACCOUNTPK, ACCOUNTCODE FROM table(MVT_TAB) 
+0

Das ist der vermisste Trick ist !! Danke –