Как я могу отладить значение коллекции PL / SQL в Oracle? - PullRequest
2 голосов
/ 21 октября 2010

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

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

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


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

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)

1 Ответ

4 голосов
/ 22 октября 2010

Вы были почти там ... Еще один шаг. Определение 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; 
...