Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключениz в обработке insert select / 11 сообщений из 11, страница 1 из 1
27.09.2018, 16:28
    #39709407
Зурбаган
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
Пытаюсь перенести данные из одной таблицы в другую при помощи конструкции
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
27.09.2018, 16:31
    #39709411
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
Зурбаган,

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

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

Отрезай на триггере substr(:new.a) + складывай ошибочные записи в таблицу с нормальной структурой.
...
Рейтинг: 0 / 0
27.09.2018, 16:41
    #39709420
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
поздравляю с изобретением error logging
...
Рейтинг: 0 / 0
27.09.2018, 16:45
    #39709422
Зурбаган
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
Shtock,
Забыл указать, что база - Oracle 9i. Я так понял что там этого нет.
...
Рейтинг: 0 / 0
27.09.2018, 16:55
    #39709427
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
Код: 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
27.09.2018, 17:15
    #39709434
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
ЗурбаганOracle 9i.
Код: plsql
1.
FORALL … SAVE EXCEPTIONS
...
Рейтинг: 0 / 0
27.09.2018, 17:24
    #39709439
Бельфя
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
insert all?
...
Рейтинг: 0 / 0
28.09.2018, 12:01
    #39709754
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключениz в обработке insert select
ЗурбаганЗабыл указать, что база - 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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Исключениz в обработке insert select / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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