|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Прошу помощи! Есть 2 таблицы: TABLE1: id, col1, col2, col3 TABLE2: id, sv_id, col1, col2 Таблицы связаны между собой, TABLE1 основная, в TABLE2 связанное поле sv_id, если запись в TABLE1 удаляется, то удаляются все записи в TABLE2. Идея перед удалением копировать данные в отдельные таблицы TABLE1BC и TABLE2BC соответственно. По TABLE1 все просто, создал таблицу TABLE1BC делаю триггер: create or replace TRIGGER BACK_DELETE BEFORE DELETE ON TABLE1 FOR EACH ROW BEGIN insert into TABLE1BC( id, col1, col2, col3) values( :old.id, :old.col1, :old.col2, :old.col3) END; А вот каким образом скопировать данные из связанной таблицы TABLE2 притом, что в ней записей, относящихся к TABLE1 может быть несколько и записи в TABLE2 могут также удаляться пользователями независимо от TABLE1. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 11:39 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javl, то удаляются все " связанные " записи (cascade)? 1) Виставлять флажок 2) Проверять стек вызова (имхо долго) ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 12:12 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavl, то удаляются все " связанные " записи (cascade)? 1) Виставлять флажок 2) Проверять стек вызова (имхо долго) ..... stax Да, удаляются все связанные по полю ID_SV У меня были разные мысли, запуск процедуры..., но может опытные форумчане подскажут как правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 12:15 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javl, create flashback archive ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 12:22 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
-2-Javl, create flashback archive На сколько я понимаю туда будут попадать все удаляемые записи, а смысл немного в другом... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 12:32 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavl, 2) Проверять стек вызова (имхо долго) ..... stax сорррри со стеком я возможно приврал (поспешил не проверив) зы остается выставлять фражок в триггере для TABLE1 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 13:48 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javlи записи в TABLE2 могут также удаляться пользователями независимо от TABLE1.второй триггер на TABLE2 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:10 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
ma1tusJavlи записи в TABLE2 могут также удаляться пользователями независимо от TABLE1.второй триггер на TABLE2 Туда будут попадать все удаляемые записи, а надо только те, которые связаны с удаленными из TABLE1. Была мысль, писать все, а потом отбирать и ненужные удалять, но это грабли. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:12 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javl надо только те, которые связаны с удаленными из TABLE1. JavlТаблицы связаны между собой Я прям запутался. Кто на ком стоял? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:16 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
andrey_anonymous Кто на ком стоял? имхо если в TABLE2 строки удяляются "каскадно" (delete table1), то их надо сохранять в TABLE2BC, если напрямую (delete table2), то сохранять не надо ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:21 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javl, у вас от TABLE2.sv_id внешний ключ более чем на одну (TABLE1) таблицу ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:26 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Staxandrey_anonymous Кто на ком стоял? имхо если в TABLE2 строки удяляются "каскадно" (delete table1), то их надо сохранять в TABLE2BC, если напрямую (delete table2), то сохранять не надо ..... stax Для ясности, пусть TABLE1 это Сотрудник, а TABLE2 Документы При работе через программу, пользователи могут удалять отдельные документы, а если они удаляют Сотрудника (Иванова Ивана Ивановича), то удаляются все его (связанные) документы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:54 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
ma1tusJavl, у вас от TABLE2.sv_id внешний ключ более чем на одну (TABLE1) таблицу ? В TABLE2 поле SV_ID только ID из TABLE1 и все! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:55 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
JavlПри работе через программу, пользователи могут удалять отдельные документы, а если они удаляют Сотрудника (Иванова Ивана Ивановича), то удаляются все его (связанные) документы. .. и требуется сохранить... что и в каком случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 14:58 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
andrey_anonymousJavlПри работе через программу, пользователи могут удалять отдельные документы, а если они удаляют Сотрудника (Иванова Ивана Ивановича), то удаляются все его (связанные) документы. .. и требуется сохранить... что и в каком случае? В TABLE1BC сохраняется удаляемая запись из TABLE1 (к Примеру Иванов Иван Иванович), а в TABLE2BC должны сохраниться все записи из TABLE2 связанные с удаляемой записью из TABLE1 (документ1, документ2, документ3 у которых в поле SV_ID прописан ID Иванова) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 15:03 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
JavlДля ясности я ето понимаю поетому предлагаю выставлять/снимать флажок в триггере на табле1, и проверять его (есле установлен копируем) в триггере табле2 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 15:05 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavlДля ясности я ето понимаю поетому предлагаю выставлять/снимать флажок в триггере на табле1, и проверять его (есле установлен копируем) в триггере табле2 ..... stax Триггер создан в TABLE1, он не видит, если в нем прописывать TABLE2, я пробовал так в самом начале ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 15:09 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
JavlТриггер создан в TABLE1, он не видит, если в нем прописывать TABLE2, я пробовал так в самом начале флажок ВЫСТАВЛЯТЬ в триггере флажком может быть 1) пакетная переменная 2) контекст 3) поле в таблице 4) последовательность ... 999) еще что-то ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 15:21 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javl, логику на флажке могу для примера нарисовать но Javlно может опытные форумчане подскажут как правильно? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 15:26 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavl, логику на флажке могу для примера нарисовать но Javlно может опытные форумчане подскажут как правильно? ..... stax Да, интересно, объясните! У меня вопрос, а что дальше т.е. сработал флажок и... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 15:35 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Тут проблема может быть в том, что при каскадном удалении сначала срабатывают триггеры дочерних таблиц, а затем уже родительских. Т.е. флаг будет взведен тогда, когда уже все будет сделано и надобность в нем отпадет. Рекомендую залогировать последовательность вызова всех BEFORE и AFTER триггеров на обе таблицы при удалении записи в родителе. И от этого уже плясать. А вообще - триггеры и прямые DML команды из клиента - зло. Приучайтесь делать все через процедуры, тогда все такие моменты сразу отпадут. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 16:11 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javl, Код: 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. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.
ps минус - умники могут сбросить пакетную переменную ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 16:21 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Александр СпелицинТут проблема может быть в том, что при каскадном удалении сначала срабатывают триггеры дочерних таблиц, а затем уже родительских. Т.е. флаг будет взведен тогда, когда уже все будет сделано и надобность в нем отпадет. Рекомендую залогировать последовательность вызова всех BEFORE и AFTER триггеров на обе таблицы при удалении записи в родителе. И от этого уже плясать. А вообще - триггеры и прямые DML команды из клиента - зло. Приучайтесь делать все через процедуры, тогда все такие моменты сразу отпадут. Проблема в том, что клиент это купленная программа и влезть в нее нет возможности. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2019, 16:27 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
а триггер обязательно нужен? может правильнее написать процедуру для этого процесса вместо оператора Delete и все необходимое в этой процедуре сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 02:54 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
alex-lsа триггер обязательно нужен? может правильнее написать процедуруКак можно не прочитать строчкой выше? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 07:21 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
alex-ls, Как я писал выше, программа-клиент куплен, в нем пользователь нажимает удалить Иванова Ивана Ивановича и срабатывают внутренние триггеры и удаляют связанные объекты. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 12:38 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javlalex-ls, Как я писал выше, программа-клиент куплен, в нем пользователь нажимает удалить Иванова Ивана Ивановича и срабатывают внутренние триггеры и удаляют связанные объекты. если купленная, то что мешает спросить у разработчика можно ли сделать? или разработчик отказывается? Если Вы наделаете триггеры в купленной системе, то можете лишиться поддержки ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 14:31 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
ElicКак можно не прочитать строчкой выше? читал тему вечером, утром вспомнил что хотел написать, и перед выходом на работу написал, не заметив, что ответ дали уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 14:33 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javlalex-ls, Как я писал выше, программа-клиент куплен, в нем пользователь нажимает удалить Иванова Ивана Ивановича и срабатывают внутренние триггеры и удаляют связанные объекты. так "срабатывают внутренние триггеры", или on cascade? ps імхо добавте триггера и не мучтесь ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 14:36 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavlalex-ls, Как я писал выше, программа-клиент куплен, в нем пользователь нажимает удалить Иванова Ивана Ивановича и срабатывают внутренние триггеры и удаляют связанные объекты. так "срабатывают внутренние триггеры", или on cascade? ps імхо добавте триггера и не мучтесь ..... stax Я предполагаю, что срабатывают внутренние триггеры или процедуры и удаляют связанные объекты, мне они недоступны. Что имеете в виду, добавте триггера и не мучтесь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 16:06 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
JavlЯ предполагаю, что срабатывают внутренние триггеры или процедуры и удаляют связанные объекты, мне они недоступны. Что имеете в виду, добавте триггера и не мучтесь ? если удаляются on cascade 21845236 ps не знаю что Вам доступно, но Вам надо определится с помощью какого механизма удаляются строки из подчиненной таблицы для ФК Код: plsql 1. 2. 3. 4. 5.
зы ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 16:34 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavlЯ предполагаю, что срабатывают внутренние триггеры или процедуры и удаляют связанные объекты, мне они недоступны. Что имеете в виду, добавте триггера и не мучтесь ? если удаляются on cascade 21845236 ps не знаю что Вам доступно, но Вам надо определится с помощью какого механизма удаляются строки из подчиненной таблицы для ФК Код: plsql 1. 2. 3. 4. 5.
зы Вот что получается C_LINK18 R CASCADE C_LINK1 R CASCADE C_LINK19 R CASCADE SYS_C0010976 C SYS_C0011003 P ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2019, 19:20 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
Javl, нужно чутку больше инфы Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
судя с того что есть CASCADE, можно предположить что удаляются каскадно (не из " внутренние триггеры") тогда выберите что Вы будете использовать в качестве флажка (имхо самый надежный контекст, но создавать лень) в триггере он делете на подчиненную таблицу с учетом значения флажка сохраняйте строки в TABLE2BC ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2019, 10:57 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavl, нужно чутку больше инфы Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
судя с того что есть CASCADE, можно предположить что удаляются каскадно (не из " внутренние триггеры") тогда выберите что Вы будете использовать в качестве флажка (имхо самый надежный контекст, но создавать лень) в триггере он делете на подчиненную таблицу с учетом значения флажка сохраняйте строки в TABLE2BC ..... stax CONSTRAINT_NAME DELETE_RU PK_TABLE ------------------------------ --------- ------------------------------ C_LINK18 CASCADE TABLE3 C_LINK1 CASCADE TABLE1 C_LINK19 CASCADE TABLE4 Нет TABLE2 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2019, 11:40 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
JavlНет TABLE2 r.TABLE_NAME='TABLE2' если FK сам на себя то появится, но тогда возможно и сохранять придется по другому Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
ps У Вас каскадно строки будут удалятся в TABLE2 не только при удалении из TABLE1 но и TABLE3,TABLE4 .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2019, 12:01 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
StaxJavl, тогда выберите что Вы будете использовать в качестве флажка (имхо самый надежный контекст, но создавать лень) stax Извиняюсь, не совсем понял, выбрать поле? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2019, 18:25 |
|
Помогите с триггером BEFORE DELETE!
|
|||
---|---|---|---|
#18+
JavlStaxJavl, тогда выберите что Вы будете использовать в качестве флажка (имхо самый надежный контекст, но создавать лень) stax Извиняюсь, не совсем понял, выбрать поле? 21845167 ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2019, 19:07 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1882646]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 277ms |
total: | 411ms |
0 / 0 |