2016-08-26 4 views
0

У меня есть оператор INSERT в процедуре с полем даты в формате NUMBER, преобразованным в DATE, но в некоторых случаях преобразование невозможно. Я пытался обработать исключение с EXCEPTIONWHEN OTHERS THEN, но он не вставляет ни одной строки.Даты включения исключения Oracle PLSQL

Я хочу вставить NULL только в поле DATE если преобразование невозможно.

Должен ли я использовать любой курсор или коллекцию?

+1

Можете ли вы показать нам код в процедуре? – mhatch

+1

Я думаю, что вы должны сделать свою собственную функцию проверки: http://stackoverflow.com/questions/4486949/safe-to-number – vercelli

ответ

4

Создайте свою собственную функцию, как это:

create or replace function safe_to_date(p number) return date DETERMINISTIC is 
    begin 
    return to_date(p, 'yyyymmdd'); 
    exception 
    when value_error 
    then return null; 
end; 

ВЫВОД

select safe_to_date(00000) as test from dual; 
TEST 
-------- 


select safe_to_date(20160826) as test from dual; 
TEST 
-------- 
26.08.16 
+1

'to_date' также распознается PL/SQL, поэтому нет необходимости добавлять бессмысленные (и влияющий на производительность) SQL-запрос. –

+1

также не используйте 'when others' без рейза - вместо этого используйте конкретное исключение, которое вы ожидаете. –

+1

@JeffreyKemp Спасибо за изменения! – vercelli

Смежные вопросы