函数返回 sys_refcursor
Posted
技术标签:
【中文标题】函数返回 sys_refcursor【英文标题】:Function return sys_refcursor 【发布时间】:2012-09-27 12:09:09 【问题描述】:我有一个关于 sys_refcursor 的问题。
sys_refcursor 只能与 select 语句一起使用,或者可以像下面这样使用。我希望该。
p_cursor 被定义为 sys_refcursor
FOR i IN c
LOOP
IF (p_start_date BETWEEN i.start_date AND i.end_date)
OR (p_end_date BETWEEN i.start_date AND i.end_date)
THEN
p_cursor := i.product_no;
END IF;
END LOOP;
【问题讨论】:
那不是游标,它是一个单一的值。您在寻找什么,以返回产品编号列表? @tbone 如果我不使用 SQL 语句,我想知道是否将 product_no 和另一列分配给 p_cursor。 @tbone 如果条件满足,那么我想分配产品编号列表。谢谢 我不太清楚你的意思 - “将另一列分配给 sys_refcursor”?从上次我检查你不能为sys_refcursor
分配任何东西,你可以定义一个强或弱的refcursor。您还可以从游标(refcursor)中获取数组、集合、行类型等。快速example。
【参考方案1】:
根据您的需要,您有两种方法可以做到这一点。
第一 如果您始终希望将列放在光标中,并根据该条件为该列分配值。您可以执行以下操作
代码:
OPEN p_cursor FOR
SELECT i.columna1, i.columna2,
(SELECT i.product_no
FROM dual
WHERE (p_start_date BETWEEN i.start_date AND i.end_date)
OR (p_end_date BETWEEN i.start_date AND i.end_date)
) as product_no
FROM table_name i
第二
如果你有时想要有专栏,有时你只是不想。您可以动态地在 varchar
变量中创建查询,然后将该查询分配给游标。
代码:
DECLARE
var VARCHAR2(200);
BEGIN
var := 'select * from dual';
open p_cursor for var;
END;
【讨论】:
感谢您的解决方案。问候以上是关于函数返回 sys_refcursor的主要内容,如果未能解决你的问题,请参考以下文章