如何在 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 调试作为从断点跳转到断点