ORA-01858 при выполнении созданной процедуры - PullRequest
0 голосов
/ 21 мая 2019

Я создал процедуру для поиска даты между today и expiry_date. Формат столбца таблицы уже в формате даты.

При создании процедуры она успешно создается без ошибок, но при выполнении процедуры, как показано ниже, отображается

ORA-01858: не числовой символ был найден там, где ожидалось число

ALTER SESSION SET NLS_DATE_FORMAT ='dd-mm-yyyy';
CREATE OR REPLACE PROCEDURE flow (
    today  IN                  DATE,
    expiry_date       IN       DATE
) AS

BEGIN
    FOR  rec in (
        SELECT *
        FROM flow4
        WHERE englishcalendar BETWEEN 'englishcalendar.today' 
                    AND 'englishcalendar.expiry_date')
    LOOP
        dbms_output.put_line(rec.englishcalendar);
    END LOOP;

EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line(sqlerrm);
END;
/

EXEC FLOW('01-02-2017','03-04-2018');
/

Я также пытался добавить to_date как при выполнении процедуры, так и при выполнении процедуры, но получил ту же ошибку Я тоже пытался с этой ссылкой тоже Ошибка при получении - ORA-01858: не числовой символ был найден там, где ожидалось числовое значение

ПРИМЕЧАНИЕ englishcalendar содержит непрерывный день 2019 года в формате даты «дд-мм-гггг»

1 Ответ

1 голос
/ 21 мая 2019

'englishcalendar.today' - это строка, а не дата.Точно так же 'englishcalendar.expiry_date'.Oracle пытается преобразовать эти строки в даты и терпит неудачу, потому что они не являются датами.

Простое решение: ссылаться на параметры как идентификаторы, а не строки:

 ... 
  FOR  rec in (
    SELECT *
    FROM flow4
    WHERE englishcalendar BETWEEN today
                AND expiry_date)
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...