powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Триггер на запрет удаления
20 сообщений из 20, страница 1 из 1
Триггер на запрет удаления
    #39254682
a.i.v.e.n.g.o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, создал триггер который должен запрещать удаление определенных записей, но взамен на это получаю стек ошибок, вот сам триггер:

ТРИГГЕРCREATE OR REPLACE TRIGGER del_test
before delete on test
declare
x number;
BEGIN
select count(tnum) into x from test where tnum=1001;
if x>0
then
raise_application_error(-20000,'Нельзя удалить запись');
end if;
END;

А вот сами ошибки:

ОШИБКИORA-20000: Нельзя удалить запись
ORA-06512: at "AIV.DEL_TEST", line 7
ORA-04088: error during execution of trigger 'AIV.DEL_TEST'

При чем ошибки выходят независимо от того какую запись я хочу удалить. Где я допустил ошибку?
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254687
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.i.v.e.n.g.o,

Нигде. Все по-честному.
Триггер проверяет, что есть записи, где tnum=1001.
И если такие записи есть, то не даёт ничего удалять.
А какие записи вы хотели спасти от удаления?
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254704
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoрa.i.v.e.n.g.o,

Нигде. Все по-честному.
Триггер проверяет, что есть записи, где tnum=1001.
И если такие записи есть, то не даёт ничего удалятьуверен?
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254705
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxEgoрa.i.v.e.n.g.o,

Нигде. Все по-честному.
Триггер проверяет, что есть записи, где tnum=1001.
И если такие записи есть, то не даёт ничего удалятьуверен?че-то я вечером ступил
нехрен читать профорум вечером в субботу :)
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254712
a.i.v.e.n.g.o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EgoрА какие записи вы хотели спасти от удаления?

Вот именно такие записи, где tnum=1001. Любые другие где tnum=1002,1003 и т.д. можно удалять.
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254714
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.i.v.e.n.g.oEgoрА какие записи вы хотели спасти от удаления?

Вот именно такие записи, где tnum=1001. Любые другие где tnum=1002,1003 и т.д. можно удалять.а ты чего хотел?
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254718
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.i.v.e.n.g.o,

Тогда вместо x>0 напишите :old.tnum=1001.
А селект можно вообще удалить.
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254722
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxнехрен читать профорум вечером в субботу :)А я чойто заскучал, вот и зашёл от нефиг делать. А тут смотрю люди маются. Решил помочь.
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254725
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoрa.i.v.e.n.g.o,

Тогда вместо x>0 напишите :old.tnum=1001.
А селект можно вообще удалить.там и триггер другой
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254726
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Что значит другой?
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254727
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoрandreymx,

Что значит другой?ич роу
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254728
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EgoрТогда вместо x>0 напишите :old.tnum=1001.
А селект можно вообще удалить.
У него триггер - after statement...

To: a.i.v.e.n.g.o,

Так и задумано. Стек ошибок присутствует всегда. Ваш клиент их всех, а не только первую, выводит. Насилуйте разработчика клиента, если считаете это неправильным :)
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254730
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Точно!
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254737
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.i.v.e.n.g.oВот именно такие записи, где tnum=1001. Любые другие где tnum=1002,1003 и т.д. можно удалять.

Твой триггeр не даст удалить никакую запись (что с tnum=1002, что с 1003 и т.д.) если в таблице есть хоть одна запись с tnum=1001.

SY.
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254739
a.i.v.e.n.g.o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYТвой триггeр не даст удалить никакую запись (что с tnum=1002, что с 1003 и т.д.) если в таблице есть хоть одна запись с tnum=1001.


в таком случае как дать понять триггеру, что можно удалять все записи, кроме тех, где tnum=1001?
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254743
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.i.v.e.n.g.oв таком случае как дать понять триггеру, что можно удалять все записи, кроме тех, где tnum=1001?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR REPLACE TRIGGER del_test
before delete on test
FOR EACH ROW
BEGIN
if :old.tnum = 1001
then 
raise_application_error(-20000,'Нельзя удалить запись');
end if;
END;
/



И учти что если DELETE удаляет > 1 записи и хотя бы у одной из них tnum=1001, то весь DELETE откатится.

SY.
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254754
a.i.v.e.n.g.o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE OR REPLACE TRIGGER del_test
before delete on test
FOR EACH ROW
BEGIN
if :old.tnum = 1001
then 
raise_application_error(-20000,'Нельзя удалить запись');
end if;
END;
/



И учти что если DELETE удаляет > 1 записи и хотя бы у одной из них tnum=1001, то весь DELETE откатится.

SY.[/quot]

Понял, премного благодарен, попутно возник вопрос как правильно объясняется эта запись:
Код: plsql
1.
if :old.tnum = 1001
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254757
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.i.v.e.n.g.oпопутно возник вопрос как правильно объясняется эта запись:


Курение доки полeзно для здоровья.

ЫНю
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254758
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYЫНюСпасибо за поднятое настроение!
...
Рейтинг: 0 / 0
Триггер на запрет удаления
    #39254887
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYa.i.v.e.n.g.oпопутно возник вопрос как правильно объясняется эта запись:Курение доки полeзно для здоровья.RTFM DML Triggers: Correlation Names and Pseudorecords (FAQ)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Триггер на запрет удаления
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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