debugging - 如何调试 Oracle 中 PL/SQL 集合的值?

标签 debugging collections plsql oracle10g

我正在调试一个......返回某些值的过程。该过程似乎使用了 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/

相关文章:

debugging - 暂停进程以让调试器有时间附加

c# - 优化 list<T>.Sort(Comparer)

java - 什么时候应该将 Java 存储过程与 Oracle 数据库一起使用……有什么缺点?

oracle - 我可以在 Xquery 中使用用户定义的函数来替换 PLSQL 中的节点值吗?

调试 Node/Express --- 需要 ('express' )创建一个中断

vb.net - Visual Studio 输出窗口不显示 Debug.Write() 发送的消息

debugging - 如何在 PHPStorm 中显示当前调试的行?

jquery - 用 jQuery 收集表单中的所有项目

java - 过滤仅具有相交数据的 ArrayList

sql - Oracle PLS-00103 错误。您如何检查现有记录并根据该条件进行更新或插入?