【问题标题】:How can I debug the value of a PL/SQL collection in Oracle?如何在 Oracle 中调试 PL/SQL 集合的值?
【发布时间】: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 集合,否则我会提供更多帮助。

标签: debugging collections plsql oracle10g


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多