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

Откуда:
Сообщений: 87
Помогите!!!!
Как в триггере (before insert, update for each row) дать sequence.nextval некоторому полю, например: :new.id <= id_sequence.nextval ???? кроме триггера где еще такое делать?

Как поставить символ ' в строку в sql??? Например, sql_text = 'It's my name'.

Спасибо!
21 ноя 06, 04:25    [3427347]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
select id_sequence.nextval into :new.id from dual;
sql_text := 'It''s my name'.
21 ноя 06, 04:37    [3427354]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
odua
Помогите!!!!
Как в триггере (before insert, update for each row) дать sequence.nextval некоторому полю, например: :new.id <= id_sequence.nextval ???? кроме триггера где еще такое делать?

Как поставить символ ' в строку в sql??? Например, sql_text = 'It's my name'.

Спасибо!

кроме триггера - в dml непосредственно..
create table mumu (n number);
create sequence mumu_seq;
insert into mumu values(mumu_seq.nextval);
declare
  a_n number;
begin
  insert into mumu values(mumu_seq.nextval) returning n into a_n;
  dbms_output.put_line(a_n);
end;
21 ноя 06, 11:37    [3428458]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
odua
Member

Откуда:
Сообщений: 87
Все отлично!!! Спасибо!!!
21 ноя 06, 13:47    [3429583]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
odua
Member

Откуда:
Сообщений: 87
В теле триггера:
.......
declare exc1 exception;
..........
if (выполнено_условие_1) raise exc1;

.............

exception
when exc1 then
raise_application_error(-20000,'Сообщение об ошибке!!!!!');
..............

При выполнении_условии_1 получаю окошко с сообщеними:

ORA-20000: Сообщение об ошибке!!!!! ------>Это надо, мое
ORA-06512: At ...........line.... ------>Это не надо, Oracle
ORA-04088: Error during execution.........------>Это не надо, Oracle

Как можно отключить ORA-06512 и ORA-04088, сохраняя только ORA-20000 - то, что надо сообщать пользователю???
21 ноя 06, 14:00    [3429677]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116217
odua
Как можно отключить ORA-06512 и ORA-04088, сохраняя только ORA-20000 - то, что надо сообщать пользователю???


Можно так (макет)

declare
v_str VARCHAR2(32000);
begin
raise_application_error(-20000, 'Error!');
exception
when others
then
v_str := dbms_utility.format_error_stack();
dbms_output.put_line(v_str);
end;
/
ORA-20000: Error!
21 ноя 06, 14:06    [3429735]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
Elic
Member

Откуда:
Сообщений: 29988
odua
Как можно отключить ORA-06512 и ORA-04088, сохраняя только ORA-20000 - то, что надо сообщать пользователю???
На клиенте надо просто показывать первую строку сообщения об ошибке.
А стек ошибок всё равно будет всегда.
21 ноя 06, 14:09    [3429768]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3909
Elic
odua
Как можно отключить ORA-06512 и ORA-04088, сохраняя только ORA-20000 - то, что надо сообщать пользователю???
На клиенте надо просто показывать первую строку сообщения об ошибке.
А стек ошибок всё равно будет всегда.

+1
ИМХО, лучше пусть будет полный стек, чем кастрированный. А что показывать юзеру - это уже дело приклада (клиента).
21 ноя 06, 14:11    [3429778]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Elic
odua
Как можно отключить ORA-06512 и ORA-04088, сохраняя только ORA-20000 - то, что надо сообщать пользователю???
На клиенте надо просто показывать первую строку сообщения об ошибке.
А стек ошибок всё равно будет всегда.

Методологически - согласен.
Но вообще, для усечения стека - есть третий параметр у raise_application_error
declare
  i number;
begin
  i := 1/0.;
exception when others then
  raise_application_error(-20222,'уй ёёё',false);
end;
21 ноя 06, 14:25    [3429876]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
odua
Member

Откуда:
Сообщений: 87
raise_application_error(-20222,'уй ёёё',false);

-------------- Все таки остается полный стек сообщений!!! :(
21 ноя 06, 14:38    [3429964]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
odua
raise_application_error(-20222,'уй ёёё',false);

-------------- Все таки остается полный стек сообщений!!! :(

Ну какой же он полный? Разве что - такой же..
Сравните с ..,true
21 ноя 06, 14:48    [3430027]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
odua
Member

Откуда:
Сообщений: 87
Да,
С true и false и без этого параметра одинаковы!!!!
21 ноя 06, 14:49    [3430045]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
orawish
Но вообще, для усечения стека - есть третий параметр у raise_application_error
Не для усечения, а наоборот ;) Если сравнивать с умолчанием...
21 ноя 06, 14:51    [3430053]     Ответить | Цитировать Сообщить модератору
 Re: sequence + триггер  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
odua
Да,
С true и false и без этого параметра одинаковы!!!!

false - это значение по умолчанию для параметра, соотв. (верю ), что без него = как false.
Ну а что при true = при false - тыкть выше по стеку просто ничего нет..
См.
SQL> declare
  2    i number;
  3  begin
  4    i := 1/0;
  5  exception when others then
  6    raise_application_error(-20222,'уй ёёё',false);
  7  end;
  8  /
declare
*
ошибка в строке 1:
ORA-20222: уй ёёё
ORA-06512: на  line 6


SQL> declare
  2    i number;
  3  begin
  4    i := 1/0;
  5  exception when others then
  6    raise_application_error(-20222,'уй ёёё',true);
  7  end;
  8  /
declare
*
ошибка в строке 1:
ORA-20222: уй ёёё
ORA-06512: на  line 6
==>ORA-01476: делитель равен нулю
21 ноя 06, 14:56    [3430081]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить