Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Обработка ошибок???  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
Доброго времени суток.
Есть запрос

insert into table(colum) values (asdfasdfa)
В colum тип данных varchar2(9).
Какое услови должно быть в Exception, чтобы обрабатывались следуующие ошибки
1. несоответствие типов данных
2. несоответствие размеров данных и столбца

заранее спасибо
19 ноя 06, 17:46    [3421204]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
Black Dragon
Member

Откуда: Москва
Сообщений: 383
Попробуйте воспользоваться ссылкой:
http://docs.rinet.ru/Oru7na95/ch21.html#Heading9

ps можно отлавливать просто код ошибки в блоке EXCEPTION с
помощью функции SQLCODE
19 ноя 06, 18:03    [3421241]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
A.K.
Member

Откуда: Пенза
Сообщений: 2571
Для большей наглядности лучше поименовать интересующие ошибки с помощью прагмы, и отлавливать их по именам.
Коды ошибок я думаю сами найдете, хотя бы поставив простеший эксперимент.

RTFM EXCEPTION_INIT pragma
19 ноя 06, 18:26    [3421275]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
A.K.
Member

Откуда: Пенза
Сообщений: 2571

P.S.: Стратегия генерации и обработки исключений в PL/SQL чрезвычайно подробно и доходчиво рассмотрена в книге Стивена Фейерштейна - очень рекомендую.

Posted via ActualForum NNTP Server 1.3

19 ноя 06, 18:28    [3421279]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116156
pravednik
Доброго времени суток.
Есть запрос

insert into table(colum) values (asdfasdfa)
В colum тип данных varchar2(9).
Какое услови должно быть в Exception, чтобы обрабатывались следуующие ошибки
1. несоответствие типов данных
2. несоответствие размеров данных и столбца

заранее спасибо

С типом данных VARCHAR2 непросто смоделировать ситуацию 1 - в VARCHAR2
конверитруется почти все.

declare 
value_too_large EXCEPTION;
PRAGMA EXCEPTION_INIT(value_too_large, -12899);
begin
insert into tab1 values (systimestamp); --'GGGGGGGGGGGGGGGGGGGGGGGGGG');
exception
when value_too_large
then
dbms_output.put_line('Value too large');
end;

Для типа systimesatmp например случай 1 мутирует в случай 2 с тем же
exception -12899
19 ноя 06, 18:59    [3421341]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
dmidek
pravednik
Доброго времени суток.
Есть запрос

insert into table(colum) values (asdfasdfa)
В colum тип данных varchar2(9).
Какое услови должно быть в Exception, чтобы обрабатывались следуующие ошибки
1. несоответствие типов данных
2. несоответствие размеров данных и столбца

заранее спасибо

С типом данных VARCHAR2 непросто смоделировать ситуацию 1 - в VARCHAR2
конверитруется почти все.

declare 
value_too_large EXCEPTION;
PRAGMA EXCEPTION_INIT(value_too_large, -12899);
begin
insert into tab1 values (systimestamp); --'GGGGGGGGGGGGGGGGGGGGGGGGGG');
exception
when value_too_large
then
dbms_output.put_line('Value too large');
end;

Для типа systimesatmp например случай 1 мутирует в случай 2 с тем же
exception -12899


Спасибо большое.
а как реализовать несоответствие например с DATE
19 ноя 06, 19:30    [3421418]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116156
pravednik
Спасибо большое.
а как реализовать несоответствие например с DATE


Так я уже писал, DATE по неявной конвертации типов спокойно
преобразуется в VARCHAR2(9).
А если бы VARCHAR2 был бы меньше 8, то все пришло бы к тому же исключению -12899
19 ноя 06, 19:36    [3421425]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
dmidek
Так я уже писал, DATE по неявной конвертации типов спокойно
преобразуется в VARCHAR2(9).
А если бы VARCHAR2 был бы меньше 8, то все пришло бы к тому же исключению -12899


??? Think about session NLS_DATE_FORMAT (e.g. 'DD Month YYYY HH24:MI:SS')

SY.
19 ноя 06, 20:00    [3421461]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
Ildjarn
Member

Откуда: Mordor
Сообщений: 50
А может лучше проверить вставляемое значение перед операцией insert ?
Используй функцию dump чтобы весьма строго ограничить разрешенный тип вставляемого значения.
Ну, а длину можешь проверить, попытавшись явно переконвертировать значение в varchar2.
Также dmidek тебе уже показал как эти исключения ловить.
19 ноя 06, 21:20    [3421536]     Ответить | Цитировать Сообщить модератору
 Re: Обработка ошибок???  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116156
SY
dmidek
Так я уже писал, DATE по неявной конвертации типов спокойно
преобразуется в VARCHAR2(9).
А если бы VARCHAR2 был бы меньше 8, то все пришло бы к тому же исключению -12899


??? Think about session NLS_DATE_FORMAT (e.g. 'DD Month YYYY HH24:MI:SS')

SY.


2SY: Да, спасибо большое, забыл об этом...
Для превышения VARCHAR2 (9) достаточно и менее экзотического 'DD.MM.YYYY HH24:MI:SS'

2pravednik: С учетом замечания SY, при конвертации DATE к VARCHAR2(9) в зависимости
от NLS- формата даты, также может произойти ошибка -12899 и ситуация становится
полностью аналогичной случаю timestamp из моего первого примера.

P.S. А вообще -то лучше конечно не допускать эти ситуации ...
19 ноя 06, 22:55    [3421714]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить