我想声明以下游标:
CURSOR some_cursor RETURN oks_trips.trip_id % TYPE IS
SELECT trip_id FROM oks_trips;
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误:
Error(5,36): PLS-00320: the declaration of the type of this expression is incomplete or malformed
Run Code Online (Sandbox Code Playgroud)
oks_trips.trip_id类型是NUMBER(3, 0),所以我尝试了NUMBER而不是oks_tripd.trip_id % TYPE但我仍然得到错误.
我不能省略该RETURN语句,因为我在包中声明了游标,而oracle在那里要求它.
所以问题是为什么我不能使用NUMBER或some_field % TYPE在游标的RETURN子句中?
您可以在过程,函数或包中显式声明游标,以促进面向记录的Oracle数据库数据处理.PL/SQL引擎也可以隐式声明游标.
重要的一句是"以记录为导向".显式游标声明的语法也清楚地显示了返回类型必须是a rowtype,它定义为:
游标返回的行的数据类型.
您要求它返回单个列的数据类型,而不是行/记录的数据类型.如果您不想使用现有的,%ROWTYPE那么Oracle提供了一种声明记录类型的机制,正如另一个答案已经显示的那样.
您似乎在抱怨文档没有说您不能使用标量值作为返回.它也没有说您无法返回包,视图或角色.它不需要详尽地列出您不能做的所有事情,因为它清楚地告诉您可以做什么,即返回表示行的类型.
在您的情况下,行类型只需要包含一个列,但仍然没有理由您应该 - 或者期望Oracle - 让您在该极限情况下采用快捷方式.提供一个单一的一致机制似乎并不合理 - 声明它并不是很困难record,而对它们进行建立,测试和维护单独的路径将是一个相当大的开销.
| 归档时间: |
|
| 查看次数: |
6497 次 |
| 最近记录: |