powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключениz в обработке insert select
11 сообщений из 11, страница 1 из 1
Исключениz в обработке insert select
    #39709407
Зурбаган
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытаюсь перенести данные из одной таблицы в другую при помощи конструкции
Insert a,b,c into Table1 Select a,b,c from Table2.

Проблема в том, что в Table ширина столбца b меньше, чем в таблице Table2, в результате постоянно появляется ошибка
ORA-01401: inserted value too large for column.

Использование substr для данного столбца не допускается, надо в каждом отдельном случае анализировать содержимое и править.

Как сделать так, чтобы выражение отработалось, а все ошибочные строки вставки записались в отдельную таблицу для последующего анализа и отработки?
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709411
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зурбаган,

Даже, если лень заглянуть в SQL Reference, несложно догадаться написать where в селекте.
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709413
Зурбаган
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

where lenght<20 это понятно.
Как через исключения сделать?
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709415
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗурбаганКак через исключения сделать?Смотри синтаксис в SQL Reference
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709416
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зурбаган,

Отрезай на триггере substr(:new.a) + складывай ошибочные записи в таблицу с нормальной структурой.
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709420
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поздравляю с изобретением error logging
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709422
Зурбаган
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shtock,
Забыл указать, что база - Oracle 9i. Я так понял что там этого нет.
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709427
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
create table dropme_src(id, val) as select rownum, cast(rpad('x',mod(rownum,8)+1,'y') as varchar2(10)) from dual connect by level < 17;
Table created

select * from dropme_src;
   ID VAL
----- ----------
    1 xy
    2 xyy
    3 xyyy
    4 xyyyy
    5 xyyyyy
    6 xyyyyyy
    7 xyyyyyyy
    8 x
    9 xy
   10 xyy
   11 xyyy
   12 xyyyy
   13 xyyyyy
   14 xyyyyyy
   15 xyyyyyyy
   16 x
16 rows selected

create table dropme_tgt(id integer, val varchar2(5));
Table created

exec dbms_errlog.create_error_log('dropme_tgt','dropme_tgt_err');
PL/SQL procedure successfully completed

insert into dropme_tgt
select * from dropme_src
log errors into dropme_tgt_err
reject limit unlimited
;
10 rows inserted

select ORA_ERR_NUMBER$, id, val from dropme_tgt_err;
ORA_ERR_NUMBER$ ID    VAL
--------------- ----- ----------
          12899 5     xyyyyy
          12899 6     xyyyyyy
          12899 7     xyyyyyyy
          12899 13    xyyyyy
          12899 14    xyyyyyy
          12899 15    xyyyyyyy
6 rows selected

SQL> 
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709434
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗурбаганOracle 9i.
Код: plsql
1.
FORALL … SAVE EXCEPTIONS
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709439
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
insert all?
...
Рейтинг: 0 / 0
Исключениz в обработке insert select
    #39709754
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗурбаганЗабыл указать, что база - Oracle 9i.В 9i был великолепный функционал с exceptions into.
Просто добавь constrains на источник и все будет видно.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SQL> create table t (value varchar2(4000));

Table created.

SQL> alter table t add constraint chk_t_value check(length(value) <= 5) disable;

Table altered.

SQL> insert into t
  2  select lpad('x', rownum, 'x') from dual connect by rownum <= 10;

10 rows created.

SQL> alter table t enable constraint chk_t_value exceptions into exceptions;
alter table t enable constraint chk_t_value exceptions into exceptions
                                *
ERROR at line 1:
ORA-02293: cannot validate (X.CHK_T_VALUE) - check constraint violated


SQL> select t.* from exceptions e join t on e.row_id = t.rowid;

VALUE
--------------------------------------------------------------------------------
xxxxxx
xxxxxxx
xxxxxxxx
xxxxxxxxx
xxxxxxxxxx
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключениz в обработке insert select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]