Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать TRIGGER в Oracle из Delphi? [D6]


Страницы:   1 2

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]

а права имеешь?
а точку с запятой в конце кто ставить будет?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо