Domanda

Sto cercando di stampare un tipo di tabella per scopi di debug, ma non so come. Ho provato i seguenti due metodi, nessuno dei quali funziona:

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

L'errore generato è: PLS-00306: numero o tipi di argomenti errati nella chiamata a .

Quindi, come posso stampare il contenuto di un tipo di tabella ? O c'è un modo diverso di visualizzare i contenuti?

Il table_type e il type a cui fa riferimento sono ::

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;
È stato utile?

Soluzione

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

Altri suggerimenti

Oracle ha oggetti ma è ... diverso. Non sono esattamente sicuro della tua domanda se vuoi vedere i valori delle proprietà o se vuoi davvero vedere il tipo.


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

Ora esegui un po 'di codice per esso.


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;

Naturalmente puoi creare metodi sull'oggetto per restituire informazioni per te un po 'più facilmente.


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;
/

Ora puoi chiamare le funzioni sull'oggetto per semplificare la lettura di imo.


DECLARE
  mytype    MY_TYPE;
BEGIN
  mytype := MY_TYPE('AGAIN','0');
  DBMS_OUTPUT.PUT_LINE(mytype.toString);
  DBMS_OUTPUT.PUT_LINE(mytype.getType);
END;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top