2009-07-29 8 views
4

J'essaie d'imprimer un table type à des fins de débogage, mais je ne sais pas comment. J'ai essayé les deux méthodes suivantes, ni dont le travail:Oracle PL/SQL: Comment imprimer un type de table

dbms_output.put_line (V_TEMP_TABTYPE(1)); 
dbms_output.put_line (V_TEMP_TABTYPE); 

L'erreur générée est: PLS-00306: wrong number or types of arguments in call to. Alors, comment puis-je imprimer le contenu d'un table type? Ou existe-t-il une manière différente d'afficher le contenu?

Le table_type et les références sont type il ::

create or replace TYPE MY_TYPE IS OBJECT(MyString Varchar(20) 
             , counter Number(9));  
create or replace TYPE MY_TABTYPE AS TABLE OF MY_TYPE; 
+0

Quel est le type de données de V_TEMP_TABTYPE? (dans la section DECLARE de votre code) –

+0

MY_TABTYPE, qui est: créer ou remplacer TYPE MY_TABTYPE COMME TABLE DE MY_TYPE; MY_TYPE est: créer ou remplacer TYPE MY_TYPE IS OBJECT (MyString Varchar (20), compteur Nombre (9)); –

Répondre

5
dbms_output.put_line(v_temp_tabtype(i).myString); 
7

Oracle a des objets, mais il est ... différent. Pas exactement sûr de votre question si vous voulez voir les valeurs des propriétés ou si vous voulez voir le type.


CREATE OR REPLACE TYPE MY_TYPE IS OBJECT ( 
    MyString Varchar(20) 
    , counter Number(9) 
); 

Maintenant, exécutez du code pour cela.


DECLARE 
    myType MY_TYPE; 
BEGIN 
    myType := MY_TYPE('ABC123',0); 
    -- To see the values reference the properties 
    DBMS_OUTPUT.PUT_LINE(myType.mystring); 
    -- To see they TYPE of the OBJECT 
    DBMS_OUTPUT.PUT_LINE(SYS.ANYDATA.CONVERTOBJECT(myType).getTypeName()); 
END; 

Bien sûr, vous pouvez créer des méthodes sur l'objet pour vous renvoyer des informations plus facilement.


CREATE OR REPLACE TYPE MY_TYPE IS OBJECT ( 
    MyString Varchar(20) 
    , counter Number(9) 
, MEMBER FUNCTION getType RETURN VARCHAR2 
, MEMBER FUNCTION toString RETURN VARCHAR2 
) 
/

CREATE OR REPLACE TYPE BODY MY_TYPE 
AS 
    MEMBER FUNCTION getTYPE RETURN VARCHAR2 IS 
    BEGIN 
     RETURN SYS.ANYDATA.CONVERTOBJECT(SELF).getTypeName(); 
    END; 
    MEMBER FUNCTION toString RETURN VARCHAR2 IS 
    BEGIN 
     RETURN 'MY_TYPE('||self.mystring||','||self.counter||')'; 
    END; 
END; 
/

Vous pouvez appeler les fonctions sur l'objet pour faciliter la lecture d'imo.


DECLARE 
    mytype MY_TYPE; 
BEGIN 
    mytype := MY_TYPE('AGAIN','0'); 
    DBMS_OUTPUT.PUT_LINE(mytype.toString); 
    DBMS_OUTPUT.PUT_LINE(mytype.getType); 
END; 
Questions connexes