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

发布于 2024-09-28 05:06:22 字数 663 浏览 2 评论 0原文

我正在调试一个程序......返回某些值。该过程似乎使用了 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 是由 binary_integer 索引的 desc_rec2 表

我使用的是 Oracle 10g R2 (10.2.0.1.0)

I'm debugging a procedure which ... returns certain values. The procedure seems to use DBMS_SQL.DESCRIBE_COLUMNS2 which was, till now unknown to me.

One of the out variables of the DBMS_SQL.DESCRIBE_COLUMNS2 procedure is a collection, and I want to examine that value is being returned into that - how can I observe/watch/examine this value ?

I use Allround Automations' PL/SQL Developer, but also have Oracle's SQL Developer as the tools with which I can use.


Tried iterating through the collection like so;

For Val In 1..M_Rec_Tab.Count Loop
 Dbms_Output.Put_Line( M_Rec_Tab(Val) );
end loop;

But that throws a PLS-00306: wrong number or types of arguments in call to 'PUT_LINE'.

M_Rec_Tab is declared as Dbms_Sql.Desc_Tab2 type.

Dbms_Sql.Desc_Tab2 declared as desc_tab2 is table of desc_rec2 index by binary_integer

I'm on Oracle 10g R2 ( 10.2.0.1.0 )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

め七分饶幸 2024-10-05 05:06:22

你就快到了...只需再迈一步。 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; 

You were almost there... Just one more step. The definition of desc_tab2 is:

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);

So you can loop over the collection and output the values of each field in the record:

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; 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文