![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать TRIGGER в Oracle из Delphi? [D6]
DBUser © (2007-12-21 21:45:00)Дано: Delphi 6 -> ADO -> Oracle 8
Надо: Выполнить CREATE TRIGGER
Проблема: Триггер или не создается, или создается с ошибкой
Подробности: Из Delphi через TADOCommand запускаю такой SQL-оператор:
create or replace trigger TRG before insert on TAB
for each row
declare tmp number;
begin
select my_sequence.nextval into tmp from dual;
:new.id:=tmp;
end
Команда выполняется без ошибок, но триггер не создается.
Разными тыками (изменением вышеуказаного кода) добивался, что триггер создается, но видимо кривой, т.к. при попытке сделать insert в таблицу TAB говорит что мол поправьте триггер.
Может подскажете как посмотреть на то что создалось, т.к. кроме команды DROP TRIGGER не знаю, как проверить что он вообще создался, а тем более без ошибки.
Из SQL*Plus вышеуказанный код идет без проблем (там, конечно, еще добавляется строка с /, но из Delphi это вроде бы ни к чему? Впрочем, с слэшем тоже не идет).
В общем, абзац...
Sergey13 (2007-12-24 09:04:00) [21]> [0] DBUser (21.12.07 21:45)
Зачем тебе лишняя переменная в этом тригере?
create or replace trigger TRG before insert on TAB
for each row
begin
select my_sequence.nextval into :new.id from dual;
end
DBUser (2007-12-23 22:56:00) [22]Права есть (с теми же учетными данными из SQL*Plus все создается).
Точка с запятой в конце ничего не меняет.
Вариант с вставкой ключевого поля как sequence в команде insert использовать не хочется в силу ряда причин. Воспользуюсь лишь в крайнем случае. Кстати, как там извлечь результат RETURNING - вызывать SQL-оператор из TADOQuery?
И пожалуйста поясните - что такое user_errors ?
Petr V. Abramov (2007-12-22 01:04:00) [23]P.S.
если триггер только из-за того, что в нем написано :)
можно вообще с ним не париться
insert into TAB values ( my_sequence.nextval, /*остальные поля через запятую */)
returning ID into :id -- если значение ID где-то надо сразу после вставления
Petr V. Abramov (2007-12-22 00:54:00) [24]а команда create trigger всегда выполняется успешно, по крайней мере, SQLCODE будет ora-00000. Если первые слова - create trigger :)
ошибки компиляции - в user_errors
Правильный_Вася (2007-12-21 22:28:00) [25]а права имеешь?
а точку с запятой в конце кто ставить будет?