Oracle / SQL: недопустимая модель числового формата при объединении даты и времени в одно значение даты - PullRequest
1 голос
/ 03 декабря 2011

Я пытаюсь создать в Oracle триггер, который сравнивает две даты, а затем удаляет записи, если разница двух дат падает ниже определенного значения. У меня есть полное значение даты в формате «DD-MON-YYYY HH24MI», а затем для второго значения даты я хочу объединить значение «DD-MON-YYYY» со значением «HH24MI».

Проблема, которую я получаю, состоит в том, что, когда я пытаюсь объединить значение даты и времени вместе, используя to_char, а затем используя to_date для этого возвращаемого значения, это дает мне ошибку формата ORA-01481 недопустимого числа. Соответствующие строки из самого триггера находятся ниже. Если кто-то может помочь мне с этим, это будет очень ценно!

CREATE OR REPLACE TRIGGER dateTrig
...
DECLARE
    day date;
    ftime date;
    CURSOR c_table1 IS SELECT ...;
BEGIN
FOR entry IN c_table1 LOOP
    day := to_date(entry.fdate);
    ftime := to_date(to_char(day, 'DD-MON-YYYY') || ' ' || to_char(entry.dtime, 'HH24MI'), 'DD-MON-YYYY HH24MI'); -- this is the line that is causing the error
    dbms_output.put_line(day || ', ' || ftime);
END LOOP;
END;
/

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Поскольку DTIME не является типом даты, вы не можете использовать TO_CHAR с форматом даты.Если он дополняется нулями до длины 4 символов, вы можете упростить его следующим образом:

ftime := to_date(to_char(day, 'DD-MON-YYYY') || ' ' || entry.dtime, 'DD-MON-YYYY HH24MI');
0 голосов
/ 03 декабря 2011

Я думаю, что лучше всего избегать использования to_char, если вы можете, и пытаться придерживаться функций, которые возвращают значения в их собственных форматах даты, таким образом, вам также может не потребоваться запуск команды to_date для вашей строки, у вас может быть некоторый успехсо следующим или близким отношением к нему:

ftime := Trunc(Sysdate) || ' ' || Extract(Hour From entry.dtime) || ':' Extract(Minute From entry.dtime)

Удачи

...