Как я могу отладить значение коллекции PL/SQL в Oracle?

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

Одна из выходных переменных процедуры DBMS_SQL.DESCRIBE_COLUMNS2 — это коллекция, и я хочу проверить, возвращается ли в нее значение — как я могу наблюдать/наблюдать/исследовать это значение?

Я использую PL/SQL Developer от Allround Automations, но в качестве инструментов я также использую SQL Developer от Oracle.


Пробовал перебирать коллекцию вот так;

For Val In 1..M_Rec_Tab.Count Loop
 Dbms_Output.Put_Line( M_Rec_Tab(Val) );
end loop;

Но это выдает PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'.

M_Rec_Tab объявлен как тип Dbms_Sql.Desc_Tab2.

Dbms_Sql.Desc_Tab2 объявлен как desc_tab2 is table of desc_rec2 index by binary_integer

Я использую Oracle 10g R2 (10.2.0.1.0)


person Sathyajith Bhat    schedule 21.10.2010    source источник
comment
Перебрать содержимое, используя DBMS_OUTPUT.PUT_LINE для вывода значения?   -  person OMG Ponies    schedule 21.10.2010
comment
Извините, я не работал с коллекциями Oracle, иначе я бы больше помог.   -  person OMG Ponies    schedule 21.10.2010


Ответы (1)


Вы были почти у цели... Еще один шаг. Определение desc_tab2:

TYPE desc_rec2 IS RECORD (
   col_type            binary_integer := 0,
   col_max_len         binary_integer := 0,
   col_name            varchar2(32767) := '',
   col_name_len        binary_integer := 0,
   col_schema_name     varchar2(32)   := '',
   col_schema_name_len binary_integer := 0,
   col_precision       binary_integer := 0,
   col_scale           binary_integer := 0,
   col_charsetid       binary_integer := 0,
   col_charsetform     binary_integer := 0,
   col_null_ok         boolean        := TRUE);

Таким образом, вы можете перебрать коллекцию и вывести значения каждого поля в записи:

For Val In 1..M_Rec_Tab.Count Loop   
 Dbms_Output.Put_Line( '----- Record #'||Val||' -----' );   
 Dbms_Output.Put_Line( 'Column Type: '||M_Rec_Tab(Val).col_type );   
 Dbms_Output.Put_Line( 'Max Length: '||M_Rec_Tab(Val).col_max_len );
...
 Dbms_Output.Put_Line( 'Charset Form: '||M_Rec_Tab(Val).col_charsetform );
 Dbms_Output.Put_Line( 'Nulls Allowed: '|| case when M_Rec_Tab(Val).col_null_ok then 'Y' else 'N' end );
end loop; 
person Craig    schedule 22.10.2010
comment
Вот синтаксис, который мне был нужен! Спасибо table_type_var(index).col_name - person Stephan Schielke; 15.04.2016