我正在调试一个......返回某些值的过程。该过程似乎使用了 DBMS_SQL.DESCRIBE_COLUMNS2
,到目前为止我还不知道。
DBMS_SQL.DESCRIBE_COLUMNS2
过程的输出变量之一是一个集合,我想检查该值是否返回到该集合中 - 我如何观察/监视/检查该值?
我使用 Allround Automations 的 PL/SQL Developer,但也使用 Oracle 的 SQL Developer 作为我可以使用的工具。
尝试像这样迭代集合;
For Val In 1..M_Rec_Tab.Count Loop
Dbms_Output.Put_Line( M_Rec_Tab(Val) );
end loop;
但这会引发PLS-00306:调用“PUT_LINE”时参数数量或类型错误
。
M_Rec_Tab 被声明为 Dbms_Sql.Desc_Tab2
类型。
Dbms_Sql.Desc_Tab2
声明为desc_tab2是desc_rec2按binary_integer索引的表
我使用的是 Oracle 10g R2 (10.2.0.1.0)
最佳答案
你就快到了...只需再迈一步。 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;
关于debugging - 如何调试 Oracle 中 PL/SQL 集合的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3991074/