0
请看看下面的Oracle函数,ROWNUM在Oracle SQL查询的光标不工作
DROP FUNCTION get_mapper_requests;
CREATE OR REPLACE FUNCTION get_mapper_requests(p_status IN NUMBER, p_rownum IN NUMBER)
RETURN SYS_REFCURSOR
AS
CUR_MED_MAPPER_STATUS SYS_REFCURSOR;
BEGIN
dbms_output.put_line('Status Value:'||p_status);
dbms_output.put_line('Row Count:'||p_rownum);
OPEN CUR_MED_MAPPER_STATUS FOR SELECT cmd_id,status FROM CDFDBA.MED_COM_MAPPER_CMDS WHERE
STATUS=p_status and ROWNUM < p_rownum;
RETURN CUR_MED_MAPPER_STATUS;
END;
上述函数返回的所有记录,即使如果我通过任何整数值变量p_rownum。对于前如果p_rownum = 10,该函数返回的所有记录,
调用块
DECLARE
c SYS_REFCURSOR;
v VARCHAR2(1000);
v1 VARCHAR2(1000);
BEGIN
dbms_output.put_line('Hello');
c := get_mapper_requests(0, 10);
LOOP
FETCH c INTO v,v1;
dbms_output.put_line('Value from cursor: '||v||' '||v1);
END LOOP;
CLOSE c;
END;
/
请大家多多支持。
太棒了。它现在有效。但是在这里,我假定光标将只有10条记录,当我将该值传递给10时,能否详细说明这种情况? – Hari
'LOOP'并不神奇地与游标绑定。所以你需要明确地打破我们的循环。你的光标获取了9行('<10'),但循环一直持续下去,'v'和'v1'设置为“undefined”(我认为这意味着'NULL')。所以我们放入的那一行意味着当提取没有返回任何东西时(即光标的末尾),退出循环。 – Sodved