Вопрос по oracle, plsql – Oracle PL / SQL: как напечатать табличный тип

5

Я пытаюсь распечататьtable type для целей отладки, но не знаю как. Я попробовал следующие два метода, ни один из которых не работает:

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_type иtype это ссылки ::

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;
Каков тип данных V_TEMP_TABTYPE? (в разделе DECLARE вашего кода) Vincent Malgrat
MY_TABTYPE, а именно: создать или заменить TYPE MY_TABTYPE AS TABLE OF MY_TYPE; MY_TYPE: создать или заменить TYPE MY_TYPE IS OBJECT (MyString Varchar (20), счетчик Number (9)); cluelessCoder

Ваш Ответ

2   ответа
8

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

Теперь вы можете вызывать функции объекта, что облегчает чтение imo.


DECLARE
  mytype    MY_TYPE;
BEGIN
  mytype := MY_TYPE('AGAIN','0');
  DBMS_OUTPUT.PUT_LINE(mytype.toString);
  DBMS_OUTPUT.PUT_LINE(mytype.getType);
END;
4
dbms_output.put_line(v_temp_tabtype(i).myString);

Похожие вопросы