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;
Мое требование состоит в том, чтобы изменить приведенный выше код, чтобы при передаче -1 для max_rows proc должен возвращать все строки, возвращаемые запросом. В противном случае он должен ограничивать строки в соответствии с max_rows.Отображение Количество строк на основе входного параметра
Например:
EXECUTE test_max_rows(-1);
Эта команда должна вернуть все строки, возвращаемые ЗЕЬЕСТОМ выше.
EXECUTE test_max_rows(10);
Эта команда должна возвращать только 10 строк.
Затем я предлагаю удалить DEFAULT 1000. После этого вам не понадобится этот 1 взлом. Сообщите вашему приложению, которое использует эту процедуру, чтобы сказать, что ей нужно 1000. Поскольку любое другое решение с текущим выбором побудило бы оператор IF и другой подзапрос определить количество строк в таблице, например. IF max_rows == -1 THEN max_rows = SELECT count (1) FROM table .. – tvm