2009-07-29 23 views
4

デバッグの目的でtable typeを印刷しようとしていますが、その方法はわかりません。エラーが発生したOracle PL/SQL:テーブルタイプの印刷方法

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

は次のとおりです:PLS-00306: wrong number or types of arguments in call to私は、どちらも仕事の次の二つの方法を試してみました。

したがって、table typeの内容はどのように印刷できますか?または、コンテンツを表示する方法が異なりますか?

table_typetypeそれの参照がある::

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

V_TEMP_TABTYPEのデータ型は? (コードのDECLAREセクションにあります) –

+0

MY_TABTYPEは次のとおりです。TYPE MY_TABTYPEを作成または置換します。 MY_TYPEは次のとおりです。TYPE MY_TYPE IS OBJECT(MyString Varchar(20)、counter Number(9)); –

答えて

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

Oracleは、オブジェクトを持っていますが、それは...違います。プロパティの値を表示したい場合や、実際にそのタイプを表示する場合は、質問には必ずしも正確ではありません。


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

ここでコードを実行します。


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; 

もちろん、オブジェクトのメソッドを作成して、より簡単に情報を返すことができます。


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

あなたは今、それが簡単に芋読みになり、オブジェクトの関数を呼び出すことができます。


DECLARE 
    mytype MY_TYPE; 
BEGIN 
    mytype := MY_TYPE('AGAIN','0'); 
    DBMS_OUTPUT.PUT_LINE(mytype.toString); 
    DBMS_OUTPUT.PUT_LINE(mytype.getType); 
END; 
関連する問題