2017-02-01 9 views
-1

Ich weiß, diese Frage zurück wurde inWie mehrere Wert in Oracle Database 12c

Oracle: Return multiple values in a function

oder

fragte

Returning multiple values from an Oracle 12c function

ich ihnen gefolgt, aber es Fehler verursacht, kann ich nicht kompilieren Sie es. Mir fehlt etwas, also brauche ich bitte Hilfe.

mein Code

create or replace type child_type AS OBJECT 
(
    child_id_number varchar2(2000), 
    child_name varchar2(2000), 
    other_id varchar2(2000) 
); 


     CREATE or replace function children_b 
     (
        i_id_number IN VARCHAR2 
     ) 
     RETURN child_type 
     AS 

child_record child_type; 



    BEGIN 

        SELECT LISTAGG(ch.child_id_number, ', ')WITHIN GROUP (ORDER BY ch.child_id_number), 
         LISTAGG(e.mail_name, ', ')WITHIN GROUP (ORDER BY e.mail_name), 
         LISTAGG(ib.other_id,', ')WITHIN GROUP (ORDER BY ib.other_id) 

    INTO child_type.child_id_number,child_type.child_name,child_type.other_id 

         FROM entity e 
         JOIN children ch ON ch.child_id_number = e.id_number 
         JOIN ids_base ib ON ib.id_number = ch.child_id_number 
         WHERE ib.ids_type_code = 'BAN' 
         AND ch.id_number IN (i_id_number) 
         GROUP BY ch.id_number; 


     return(child_record); 



     End children_b; 

Die Fehlermeldung ist Compilation Fehler für FUNCTION TU_ADIS.TU_CHILDREN_B

Fehler: PLS-00330: ungültige Verwendung von Typnamen oder Subtyp Name Line: 23 Text: INTO child_type.child_id_number, child_type.child_name, child_type.other_id

Fehler: PL/SQL: ORA-00904: ungültige Kennung Line: 24 Text: FROM bio_entity e

Fehler: PL/SQL: SQL-Anweisung ignoriert Line: 20 Text: SELECT LISTAGG (ch.child_id_number, '') innerhalb der Gruppe (ORDER BY ch.child_id_number),

ICH DANKE DIR SEHR.

+1

Ihre INTO-Klausel verweist auf die Variable nach ihrem Typ und nicht nach ihrem Namen 'child_record'. – APC

+0

Danke !!!!!!!!! Es funktioniert gerade jetzt !!! –

Antwort

1

In Ihrem INTO-Klausel der

child_record.child_id_number,child_record.child_name,child_record.other_id 

Sie zurückholen in eine Instanz des Objekts nicht das Objekt selbst

child_type.child_id_number,child_type.child_name,child_type.other_id 

zu

ändern. Ich habe gerade Ihre Funktion erstellt und das funktioniert für mich.

+0

danke dir so muuch !!!!! Jetzt habe ich diesen Fehler \t ORA-06530 Verweis auf nicht initialisiert, wenn ich die Funktion ausführen. weißt du was es ist? –

+1

Nicht sicher, wie Sie es ausführen, aber die von der Funktion zurückgegebene Objektinstanz muss in etwas zurückgegeben werden und etwas muss initialisiert werden. – BriteSponge

Verwandte Themen