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

Откуда:
Сообщений: 250
Доброе всем.

Задачка интересная.

Дано : Таблица my_table ( a number , b varchar2 , c varchar2 ....... ).

Нужно создать триггер который проверяет какие данные пользователь хочет вставить колонку b . Если эти данные содержат в себе символ % то отменить инсерт и перейти к следующей вставке ( инсерта ) . Надеюсь доступно обьяснил .
8 окт 18, 16:13    [21698302]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46373

maverick2104
Задачка интересная.

В каком месте она интересная-то? В той из двух строчек, которая проверяет условие или в
той, которая выбрасывает исключение?

Posted via ActualForum NNTP Server 1.5

8 окт 18, 16:15    [21698306]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
maverick2104
Member

Откуда:
Сообщений: 250
Dimitry Sibiryakov
которая выбрасывает исключение?


Через что это реализуется ?
8 окт 18, 16:25    [21698330]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1419
maverick2104,

инсерт вставляет три строки, во второй есть %, что делать с 1 и 3?

.....
stax
8 окт 18, 16:30    [21698340]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28492
maverick2104
то отменить инсерт и перейти к следующей вставке
14323375
8 окт 18, 16:30    [21698343]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
maverick2104
Member

Откуда:
Сообщений: 250
Stax
maverick2104,

инсерт вставляет три строки, во второй есть %, что делать с 1 и 3?

.....
stax


Оставить в таблице .
8 окт 18, 16:32    [21698348]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9230
Elic
maverick2104
то отменить инсерт и перейти к следующей вставке
14323375


Вставить а затем удалить != не вставлять.

SY.
8 окт 18, 16:34    [21698352]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 17931
INSTEAD OF
8 окт 18, 16:36    [21698359]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1419
Elic
maverick2104
то отменить инсерт и перейти к следующей вставке
14323375

странно я написал

заполнять надо таблицу ровидов

если есть запрет на удаление (см соседнуюю ветку) то не прокатит

.....
stax
8 окт 18, 16:43    [21698382]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46373

maverick2104
Через что это реализуется ?

RAISE/EAISE_APPLICATION_ERROR.

maverick2104
инсерт вставляет три строки, во второй есть %, что делать с 1 и 3?

Гораздо интереснее вопрос что делать с пользователем, который кричит "ну я же вставлял,
куда она делась?"

Posted via ActualForum NNTP Server 1.5

8 окт 18, 17:05    [21698412]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
maverick2104
Member

Откуда:
Сообщений: 250
Dimitry Sibiryakov
maverick2104
Через что это реализуется ?

RAISE/EAISE_APPLICATION_ERROR.

maverick2104
инсерт вставляет три строки, во второй есть %, что делать с 1 и 3?

Гораздо интереснее вопрос что делать с пользователем, который кричит "ну я же вставлял,
куда она делась?"


Я тот пользователь.

Есть джоб который инсертит в эту таблицу несколько сотен строчек ежедневно , некоторые из них ( только в одной колонке ) содержат % . Мне нужty триггер который пропустит эти строчки и выведет мне их в переменную .

Либо второй вариант , он автоматом лечил эти строчки , то есть заменяет % пробелом .
8 окт 18, 17:15    [21698421]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
XMLer
Member

Откуда:
Сообщений: 257
maverick2104
Dimitry Sibiryakov
Гораздо интереснее вопрос что делать с пользователем, который кричит "ну я же вставлял,
куда она делась?"


Я тот пользователь.


А что мешает убрать ненужные строки на этапе подготовки данных вставки?
8 окт 18, 17:18    [21698424]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46373

maverick2104
Мне нужty триггер который пропустит эти строчки и выведет мне их в
переменную .

Всё равно не вижу ничего интересного. Ты вообще документацию читать пытался? Или уснул,
так и не добравшись до error_logging_clause?

maverick2104
Либо второй вариант , он автоматом лечил эти строчки , то есть заменяет % пробелом .

Это ещё менее интересно, простой REPLACE().

Posted via ActualForum NNTP Server 1.5

8 окт 18, 17:21    [21698427]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
maverick2104
Member

Откуда:
Сообщений: 250
XMLer
maverick2104
пропущено...


Я тот пользователь.


А что мешает убрать ненужные строки на этапе подготовки данных вставки?


Нет возможности .
8 окт 18, 17:21    [21698429]     Ответить | Цитировать Сообщить модератору
 Re: Триггер на запрет инсерта  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16909
create table my_table ( a number , b varchar2(10) constraint b_chk check (instr(b,'%')=0) )
;
Table created

exec dbms_errlog.create_error_log( 'my_table', 'my_table_ERR' );
PL/SQL procedure successfully completed

insert into my_table(a,b)
select rownum, 'val'||rownum||case mod(rownum,3) when 0 then '%' end
from dual connect by level < 10
log errors into my_table_ERR
 REJECT LIMIT unlimited
;
6 rows inserted

select * from my_table;
    A B
----- -----
    1 val1
    2 val2
    4 val4
    5 val5
    7 val7
    8 val8
6 rows selected

select a,b,ORA_ERR_NUMBER$ from my_table_err;
A     B     ORA_ERR_NUMBER$
----- ----- ---------------
3     val3%            2290
6     val6%            2290
9     val9%            2290

SQL> 
8 окт 18, 17:23    [21698431]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить