|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
Господа, подскажите, пожалуйста, могу я в триггере непосредственно присвоить значение конкретному полю? Или же триггера в SQLite используют исключительно SQL-запросы? Я сделал на After Insert запрос типа: Update `tbTables` Set `tiOrderNumber` = (Select IfNull(Max(`tiOrderNumber`) + 1, 0) From `tbTables` Where `iDBID` = NEW.`iDBID`) Where `iID` = NEW.`iID`; Это сработало. Но мне хочется сделать триггер Before Insert с конструкцией типа: NEW.`tiOrderNumber` = (Select IfNull(Max(`tiOrderNumber`) + 1, 0) From `tbTables` Where `iDBID` = NEW.`iDBID`) Можно ли сделать что-то подобное? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 10:00 |
|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
P. S. Похоже, тема закрыта. В теле триггера нельзя использовать ничего, кроме Select, Insert, Update или Delete... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 10:32 |
|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
S_Gur P. S. Похоже, тема закрыта. В теле триггера нельзя использовать ничего, кроме Select, Insert, Update или Delete... В случае SQLite это значит что можно использовать только запросы понимаемые SQLite. В этой СУБД нет переменных, а значит и синтаксис работы с переменными - использовать нельзя. S_Gur Но мне хочется сделать триггер Before Insert с конструкцией типа: Хочется - сделай. Просто помни что NEW и OLD это таблицы. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 14:47 |
|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
White Owl, спасибо большое. Не сообразил сразу. Это то, что нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:12 |
|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
White Owl, не работает ваш метод "Insert Into`tbTables`(`iDBID`, `vcName`, `bTemporary`, `bZeroRecord`, `bLog`, `bUsers`, `bPrefix`, `bFldPrefixes`, `bIndPrefixes`, `txRemark`, `bIsDeletable`) Values(1, 'TriggerFieldLinks', 0, 1, 1, 0, 1, 1, 1, 'Связки триггеров с полями', 0) Returning iID; ..." [System.Data.SQLite] ErrorCode: 1 ErrorMessage: SQL logic error no such table: main.NEW Видимо, SQLite все-таки не считает таблицами OLD и NEW ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2021, 07:20 |
|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
S_Gur White Owl, не работает ваш метод Вообще, BEFORE триггеры использовать не рекомендуется (и это есть в документации). Потому что в случае работы с таблицей имеющей rowid (а это все-же большинство) в before new.rowid неизвестен. А вот в after триггере он уже установлен и можно легко изменить результат изменения . В ASE, Oracle и SA обновлять таблицу NEW можно. В MS SQL вообще нет BEFORE триггеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2021, 14:29 |
|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
White Owl, в документации, насколько я помню, нет рекомендаций относительно нежелательности использования Before Insert. Там просто обращается внимание на отсутствие RowID, но в моей ситуации он не нужен. Жаль, конечно, что в данном случае придется обойтись без триггера, но, в общем, не смертельно. В Oracle, MySQL или MS SQL я их вообще не использую. Хватает хранимых процедур ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2021, 15:22 |
|
Триггер Before Insert
|
|||
---|---|---|---|
#18+
S_Gur White Owl, в документации, насколько я помню, нет рекомендаций относительно нежелательности использования Before Insert. В очень мягкой форме, но есть: https://www.sqlite.org/lang_createtrigger.html#cautions_on_the_use_of_before_triggers ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2021, 15:39 |
|
|
Start [/forum/topic.php?fid=54&tid=2008321&gotonew=1]: |
0ms |
get settings: |
3ms |
get forum list: |
9ms |
check forum access: |
0ms |
check topic access: |
0ms |
track hit: |
9ms |
get topic data: |
3ms |
get first new msg: |
1ms |
get forum data: |
1ms |
get page messages: |
13ms |
get tp. blocked users: |
0ms |
others: | 66ms |
total: | 105ms |
0 / 0 |