Oracle PL / SQL: come stampare un tipo di tabella
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;
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;