Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Защита данных / 7 сообщений из 7, страница 1 из 1
03.02.2021, 18:22
    #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
03.02.2021, 18:40
    #40041316
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Защита данных
Tank87,
что Вы понимаете под
авторзащитить от обновления данные техники,если она выдана?

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

.....
stax
...
Рейтинг: 0 / 0
03.02.2021, 19:11
    #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
04.02.2021, 09:20
    #40041433
Tank87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Защита данных
Если user_id находится в таблице "выданная_техника" ,то данные user_id в таблице "Работники" нельзя изменить.
...
Рейтинг: 0 / 0
04.02.2021, 11:08
    #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
04.02.2021, 18:31
    #40041772
Tank87
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Защита данных
Конечно же я сделала и первичный ключ и внешний.
Мне нужно было если такой работник есть в таблице выданная техника,чтобы у него нельзя было изменить ни имя,ни фамилию.
🙄
...
Рейтинг: 0 / 0
04.02.2021, 18:51
    #40041779
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Защита данных
Tank87
Конечно же я сделала и первичный ключ и внешний.
Мне нужно было если такой работник есть в таблице выданная техника,чтобы у него нельзя было изменить ни имя,ни фамилию.
🙄


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

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


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