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

Posted

技术标签:

【中文标题】如何在 Oracle 中调试 PL/SQL 集合的值?【英文标题】:How can I debug the value of a PL/SQL collection in Oracle? 【发布时间】:2010-10-21 19:17:36 【问题描述】:

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

【问题讨论】:

遍历内容,使用DBMS_OUTPUT.PUT_LINE打印出值? 抱歉,我没有使用过 Oracle 集合,否则我会提供更多帮助。 【参考方案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; 

【讨论】:

这就是我需要的语法!谢谢 table_type_var(index).col_name

以上是关于如何在 Oracle 中调试 PL/SQL 集合的值?的主要内容,如果未能解决你的问题,请参考以下文章

在打算多次运行的 Oracle PL/SQL 脚本中,是不是需要清除集合?

Toad Oracle Pl/sql 调试作为从断点跳转到断点

如何在 sqlplus 中调试 Oracle 动态 sql?

Oracle_PL/SQL 集合

ORACLE PL/SQL:使用集合的动态 SQL 选择

从 Oracle PL/SQL 多级集合生成 XML