我正在尝试使一个过程返回一个记录子集作为单个类型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;
,但我想知道为什么这是必要的。
答案 0 :(得分:1)
a_t
不是一种类型。它是一个类型为a_cur%ROWTYPE
的变量。您不能将其用作类型。
a_t%TYPE
是一种类型,因此可行。
“集合变量声明”的语法图是in the PL/SQL docs。你会看到你需要一个类型,或者rowtype_attribute
,其中包含附加了%ROWTYPE
的光标,表或视图名称,或者type_attribute
,它本质上是一个变量名称{{3}} 1}}附加。