|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
Всем доброго времени суток. Натолкнулся на проблему, где не ждал: в триггере [before insert] задаю значение столбца new.SomeColumn, и ожидаю, что именно оно и вставится в таблицу. Как бы не так... Не модифицируется; что пришло в триггер, то и вставляется (в том же MS SQL Server - именно так срабатывает). Исходный текст: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
По статье http://www.sqlite.org/lang_createtrigger.html - все корректно. Но там нет ничего насчет оперирования OLD.* / NEW.*, только про корректность их употребления в текстах триггеров. Где корень зла? Настройки БД? Специфика SQLite? Подскажите, кто знает ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2012, 16:39 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
Serg_Gap, нельзя менять значения Код: sql 1.
, в тригере формируйте insert с нужным значением ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2012, 17:22 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
pit_alex, Наверно вы хотели сказать UPDATE... Serg_Gap, Допустимы только DML-операторы. Переменных нет ни в какой форме. Это не СУБД, а embedded - не забывайте! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.08.2012, 12:59 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
pit_alexнельзя менять значения Код: sql 1.
Уже понял, но не понял, почему именно ("нельзя" - это слишком строго; можно, но без толку). Немного объяснил RXL: RXLЭто не СУБД, а embedded - не забывайте! А так похоже на СУБД... И странно... Это ведь разрешимо - сделать new.*, old.* изменяемыми. Жаль, что этого нет. Конечно, выход найден: в триггере [AfterInsert] делать обновление (новая запись уже будет присутствовать в таблице), но это очень нелогично - делать запрос на обновление ТАБЛИЦЫ, когда можно обновить одну-единственную запись, явно присутствующую в триггере... Спасибо RXL и pit_alex, что откликнулись. Ответ я получил. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.08.2012, 09:20 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
Serg_Gappit_alexнельзя менять значения Код: sql 1.
Уже понял, но не понял, почему именно ("нельзя" - это слишком строго; можно, но без толку). Немного объяснил RXL: RXLЭто не СУБД, а embedded - не забывайте! А так похоже на СУБД... И странно... Это ведь разрешимо - сделать new.*, old.* изменяемыми. Жаль, что этого нет. Конечно, выход найден: в триггере [AfterInsert] делать обновление (новая запись уже будет присутствовать в таблице), но это очень нелогично - делать запрос на обновление ТАБЛИЦЫ, когда можно обновить одну-единственную запись, явно присутствующую в триггере... Спасибо RXL и pit_alex, что откликнулись. Ответ я получил. а где такое есть. чтобы можно было менять old.* и new.* ? Есть триггеры before и after. там и меняйте... триггеров может быть несколько. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2012, 18:03 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
Winnipuhа где такое есть. чтобы можно было менять old.* и new.* ? 12995038 Serg_Gap(в том же MS SQL Server - именно так срабатывает ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 10:45 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
Winnipuh а где такое есть. чтобы можно было менять old.* и new.* ? Есть триггеры before и after. там и меняйте... триггеров может быть несколько. В Oracle можно подменять :new на строчном триггере без DML if INSERTING or UPDATING then :new.last_user := user; end if; :old подменять нельзя - (не понятно как и зачем) его можно только сохранить и использовать для проверок. p.s. зато в оракле нельзя делать DML к таблице на которой в текущей момент работает строчный триггер возникает "мутация" ... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 10:50 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
Serg_GapWinnipuhа где такое есть. чтобы можно было менять old.* и new.* ? 12995038 Serg_Gap(в том же MS SQL Server - именно так срабатывает странно вы ответили два ссылку на эту же тему. Но так и не написали, какой сервер позволяет менять new.* значения в триггере? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 11:17 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
2Winnipuh: это ссылка не на тему, а на сообщение, содержащее ответ на вопрос. Процитировал отдельно, выделив цветом название сервера. Если этого недостаточно, please: MS SQL Server (у меня 2005 / 2008, на разных серверах локалки, пользую оба). (ЕМНИП, PG и FB - тоже позволяют задавать вставляемое значение в триггере BI, изменяя NEW.[SomeField]) PPA:old подменять нельзя - (не понятно как и зачем)Согласен; в запале включил в список. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 14:34 |
|
Вопрос к знатокам по заданию значений NEW.* в триггере [BEFORE INSERT]
|
|||
---|---|---|---|
#18+
Кстати (или некстати - не по теме вопроса, но раз уж здесь встретились): Winnipuh, не интересно? Настоящие Кристофер Робин и Винни-Пух. Прототипы известных сказочных героев. 1926-28 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 15:04 |
|
|
start [/forum/topic.php?fid=54&gotonew=1&tid=2008975]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 431ms |
0 / 0 |