Oracle PL/SQL:如何打印表类型

5 oracle plsql

我正在尝试打印table type用于调试目的,但不知道如何.我尝试了以下两种方法,两种方法都不起作用:

dbms_output.put_line (V_TEMP_TABTYPE(1));
dbms_output.put_line (V_TEMP_TABTYPE);
Run Code Online (Sandbox Code Playgroud)

产生的错误是: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;
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 8

Oracle有对象,但它有所不同.如果您想要查看属性的值或者您想要实际查看类型,则不完全确定您的问题.


CREATE OR REPLACE TYPE MY_TYPE IS OBJECT ( 
  MyString Varchar(20)
  , counter Number(9) 
);
Run Code Online (Sandbox Code Playgroud)

现在运行一些代码.


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;
Run Code Online (Sandbox Code Playgroud)

当然,您可以在对象上创建方法,以便更轻松地返回信息.


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;
/
Run Code Online (Sandbox Code Playgroud)

您现在可以调用对象上的函数,使其更容易阅读imo.


DECLARE
  mytype    MY_TYPE;
BEGIN
  mytype := MY_TYPE('AGAIN','0');
  DBMS_OUTPUT.PUT_LINE(mytype.toString);
  DBMS_OUTPUT.PUT_LINE(mytype.getType);
END;
Run Code Online (Sandbox Code Playgroud)


jva*_*jva 5

dbms_output.put_line(v_temp_tabtype(i).myString);
Run Code Online (Sandbox Code Playgroud)