我正在写一个pl/sql函数,需要从select语句中选择多行:
SELECT pel.ceid
FROM pa_exception_list pel
WHERE trunc(pel.creation_date) >= trunc(SYSDATE-7)
如果我用途:
SELECT pel.ceid
INTO v_ceid
它只存储了一个值,但是我需要存储这个select返回的所有值,由于这是一个函数,我不能只使用简单的select,因为我得到了错误,“INTO- is expected”。
4条答案
按热度按时间mbjcgjjk1#
你可以使用一个记录类型来做这件事。下面的例子应该适合你
所以在你的情况下,它会像这样
3hvapo4f2#
如果你真的需要存储多行,检查BULK COLLECT INTO语句和例子,但是也许FOR游标LOOP和逐行处理会是更好的决定。
tyky79it3#
您可以将所有列存储在一个
rowtype
参数中,然后显示您想要显示的列(假设ceid
是您的主键列,col1
和2
是您的表中的其他一些列):jdgnovmf4#
here的注解:
在这种情况下,游标FOR LOOP声明、打开、提取和关闭隐式游标。但是,隐式游标是内部游标;因此,您不能引用它。
请注意,Oracle数据库会自动优化FOR LOOP游标,使其工作方式类似于BULK COLLECT查询。虽然您的代码看起来好像一次提取一行,但Oracle数据库一次提取多行,并允许您单独处理每一行。