powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Защита данных
7 сообщений из 7, страница 1 из 1
Защита данных
    #40041307
Tank87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте люди добрые!!!!Помогите пожалуйста новичку!!!Неделю не могу сделать...Задание: защитить от обновления данные техники,если она выдана.
Таблица Работники (user_id,Имя, Фамилия) и Таблица Выданная_техника (oper_id,user_id,item_id,Количество, Дата_операции).
Вот примерно что есть:
СREATE TRIGGER TR
AFTER UPDATE
ON rab_1
BEGIN
FOR aRow IN (SELECT user_id FROM Выданная_техника)
LOOP
INSERT INTO Выданная_техника (user_id) values (aRow.user_id);
END LOOP;
END TR;
...
Рейтинг: 0 / 0
Защита данных
    #40041316
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tank87,
что Вы понимаете под
авторзащитить от обновления данные техники,если она выдана?

приведите пример из нескольких строк, когда надо защитать (выдана), и когда не надо (не выдана)

.....
stax
...
Рейтинг: 0 / 0
Защита данных
    #40041327
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Connected to Oracle Database 11g Release 11.2.0.1.0 
Connected as supermag@//192.168.1.201/DBOFFICE

SQL> create table active(id number not null, name varchar2(100) not null, status number default 0 not null);

Table created


SQL> insert into active values (1, 'Утюг', 0);

1 row inserted


SQL> insert into active values (2, 'Телефон', 1);

1 row inserted



SQL> 
SQL> create trigger active_trg after insert or delete or update on active for each row
  2  
  3  begin
  4    if nvl(:new.status, :old.status) = 1 then
  5      raise_application_error(-20001, 'Нельзя менять строки со статусом 1.');
  6    end if;
  7  end;
  8  /

Trigger created



SQL> update active set name = 'Утюг старый' where id = 1;

1 row updated


SQL> update active set name = 'Телефон списанный' where id = 2;
update active set name = 'Телефон списанный' where id = 2

ORA-20001: Нельзя менять строки со статусом 1.
ORA-06512: at "SUPERMAG.ACTIVE_TRG", line 3
ORA-04088: error during execution of trigger 'SUPERMAG.ACTIVE_TRG'

SQL> 



А что вам надо - как и просит Stax, поставьте ТЗ.
...
Рейтинг: 0 / 0
Защита данных
    #40041433
Tank87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если user_id находится в таблице "выданная_техника" ,то данные user_id в таблице "Работники" нельзя изменить.
...
Рейтинг: 0 / 0
Защита данных
    #40041476
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tank87
Если user_id находится в таблице "выданная_техника" ,то данные user_id в таблице "Работники" нельзя изменить.


создайте внешний ключ для таблицы "выданная_техника" на "Работники"
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
SQL> create table r(user_id int primary key,fio varchar2(10));

Table created.

SQL> ed
Wrote file afiedt.buf

  1* create table vt(user_id int ,cc number(10,2),d date,FOREIGN KEY (user_id) REFERENCES r)
SQL> /

Table created.

SQL> insert into r values (1,'Tank87');

1 row created.

SQL> insert into r values (2,'Stax');

1 row created.

SQL> insert into vt values(1,100,sysdate);

1 row created.

SQL> update r set user_id=20 where user_id=2;

1 row updated.

SQL> update r set user_id=10 where user_id=1;
update r set user_id=10 where user_id=1
*
ERROR at line 1:
ORA-02292: integrity constraint (STAX.SYS_C001908021) violated - child record
found

SQL> select * from r;

   USER_ID FIO
---------- ----------
         1 Tank87
        20 Stax

SQL>



ps
в древних версиях рекомендовали внешии ключи индексировать

.....
stax
...
Рейтинг: 0 / 0
Защита данных
    #40041772
Tank87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечно же я сделала и первичный ключ и внешний.
Мне нужно было если такой работник есть в таблице выданная техника,чтобы у него нельзя было изменить ни имя,ни фамилию.
🙄
...
Рейтинг: 0 / 0
Защита данных
    #40041779
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tank87
Конечно же я сделала и первичный ключ и внешний.
Мне нужно было если такой работник есть в таблице выданная техника,чтобы у него нельзя было изменить ни имя,ни фамилию.
🙄


незакомиченные данные в "таблице выданная техника" надо учитывать?

.....
stax
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Защита данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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