|
Помогите с триггером 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 |
|
|
start [/forum/topic.php?fid=52&msg=39792338&tid=1882646]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 274ms |
total: | 416ms |
0 / 0 |