Для этого вам не нужен динамический SQL.Процедура может принимать 2 параметра даты и может использоваться непосредственно в запросе.Если вы хотите отобразить несколько строк в DBMS_OUTPUT
, одним простым способом является использование неявного цикла for.
CREATE OR REPLACE PROCEDURE GET_MESSAGE( p_start_date date, p_end_date date)
AS
BEGIN
FOR rec IN
(
SELECT MESSAGE_ID FROM MSG_TABLE
WHERE DATE_OF_OPERATION BETWEEN p_start_date AND p_end_date
) LOOP
dbms_output.put_line('V_RESULT:'||rec.MESSAGE_ID);
END LOOP;
END;
/
вызовите процедуру как
BEGIN
GET_MESSAGE(DATE '2018-05-30', DATE '2018-06-22');
END;
/
Демо
Что именно вы пытались сделать при использовании ROWNUM BETWEEN 1 and 2
?Обратите внимание, что простое использование ROWNUM
без ORDER BY
внутри подзапроса не гарантирует, что вы увидите верхние 2 message_ids.Если ваше требование связано с чем-то другим, укажите его в вопросе, отредактировав его, и мы можем помочь вам изменить запрос на выборку.
РЕДАКТИРОВАТЬ : Похоже, что вы можете использоватьВывод XML, вы должны предпочесть dbms_xmlgen.getxml
, который дает результат CLOB
, который можно выбрать из запроса выбора.Вот пример.
CREATE OR REPLACE FUNCTION pr_outxml RETURN CLOB
AS
BEGIN
RETURN dbms_xmlgen.getxml('select * from employees where rownum<= 2');
END;
/
Теперь получите вывод как select pr_outxml from dual;
.Вы можете изменить этот код с помощью дополнительных параметров.