CREATE OR REPLACE PROCEDURE test_max_rows (
max_rows IN NUMBER DEFAULT 1000
)
IS
CURSOR cur_test (max_rows IN number) IS
SELECT id FROM test_table
WHERE user_id = 'ABC'
AND ROWNUM <= max_rows;
id test_table.id%TYPE;
BEGIN
OPEN cur_test(max_rows) ;
LOOP
FETCH cur_test INTO id;
EXIT WHEN cur_test%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('ID:' || id);
END LOOP;
END;
我的要求是修改上面的代码,以便当我为max_rows传递-1时,proc应该返回查询返回的所有行。否则,它应该按照max_rows限制行数。显示基于输入参数的行数
例如:
EXECUTE test_max_rows(-1);
这个命令应该返回由上面的SELECT语句返回的所有行。
EXECUTE test_max_rows(10);
该命令应该只返回10行。
我建议删除DEFAULT 1000。之后你不需要这个-1破解。告诉你的应用程序使用这个过程来说它需要1000个。因为任何其他带有当前select的解决方案都会引发一个IF语句和另一个子查询来确定表中有多少行,例如。 IF max_rows == -1 THEN max_rows = SELECT count(1)FROM table .. – tvm 2014-09-23 09:30:03