程序声明错误(PLS-00488)

时间:2014-12-15 10:36:15

标签: plsql oracle-sqldeveloper

我正在尝试使一个过程返回一个记录子集作为单个类型a_ntt满足我试图定义游标a_cur的特定要求,这是相关的代码我的问题:

a_t a_cur%ROWTYPE;

TYPE a_ntt IS TABLE OF a_t; 
l_a a_ntt;

我的数据库服务器在考虑变量a_t时抛出PLS-00488(无效变量声明对象必须是类型或子类型)。我想知道为什么。对我而言,似乎我已经为a_t提供了一个类型,我建议ROWTYPE为我做这个,但显然我没有得到一些东西。

我想知道为什么会出现此错误,为什么将a_t声明为a_cur%ROWTYPE并不会阻止此错误。

只是为了确保,我已经通过在行中添加%TYPE来解决了这个问题,所以TYPE a_ntt IS TABLE OF a_t%TYPE;,但我想知道为什么这是必要的。

1 个答案:

答案 0 :(得分:1)

a_t不是一种类型。它是一个类型为a_cur%ROWTYPE的变量。您不能将其用作类型。

a_t%TYPE是一种类型,因此可行。

“集合变量声明”的语法图是in the PL/SQL docs。你会看到你需要一个类型,或者rowtype_attribute,其中包含附加了%ROWTYPE的光标,表或视图名称,或者type_attribute,它本质上是一个变量名称{{3}} 1}}附加。