Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
Исполняются ли несколько действий в одном rules в рамках одной транзакции или нет? Если нет, то можно ли повесить триггер не на таблицу, а на view? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2006, 12:18 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
Ага. нашел вот это: http://sql.ru/forum/actualthread.aspx?tid=253182&hl=rules 4321кажется вы наступили на типовой грабель с неатомарностью руля. Выходит так, что нужно писать на триггере. Можно ли повесить триггер не на таблицу, а на view? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2006, 15:05 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
tadminАга. нашел вот это: http://sql.ru/forum/actualthread.aspx?tid=253182&hl=rules 4321кажется вы наступили на типовой грабель с неатомарностью руля. Выходит так, что нужно писать на триггере. Можно ли повесить триггер не на таблицу, а на view? 1. руле, думается, - таки транзакция (откатываться при ошибке батча должна целиком - можно проверить, а при нарушении поднять кипеш). ПРоблема в другом. она 1.1. перевыполняет все (VOLATILE) ф-ии, переданные ей (в New.field по дефаулту этих field), скоко бы раз они (New.field) не упоминались. Это известный баг, исправляться, как говорят, не будет. 1.2. каждый стейтмент заново пересчитывает набор данных NEW.*, на который/ посредством которого действует. (плохо сформулировал, но найти где-то тут, в старых обсуждениях можно) и 2. тот же пакет можно завернуть в 1-у хранимку и делать один единственный SELECT my_batch(new.f1, new.f2 ....); в руле, вместо пакета. Чем хуже триггера? (если другого доступа к таблицам не давать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2006, 15:25 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
4321 1. руле, думается, - таки транзакция (откатываться при ошибке батча должна целиком - можно проверить, а при нарушении поднять кипеш). это утешительно, поскольку два моих currvalue(sequence) подряд не вернут разные значение. 4321 ПРоблема в другом. она 1.1. перевыполняет все (VOLATILE) ф-ии, переданные ей (в New.field по дефаулту этих field), скоко бы раз они (New.field) не упоминались. Это известный баг, исправляться, как говорят, не будет. 1.2. каждый стейтмент заново пересчитывает набор данных NEW.*, на который/ посредством которого действует. (плохо сформулировал, но найти где-то тут, в старых обсуждениях можно) кажется я понял, если сам повторно внес изменения, то new.* тут же переопределится... 4321 2. тот же пакет можно завернуть в 1-у хранимку и делать один единственный SELECT my_batch(new.f1, new.f2 ....); в руле, вместо пакета. Чем хуже триггера? (если другого доступа к таблицам не давать). Да, видимо это лучший выход. Не понял только, почему меня ругают за попытку использовать perform FW_ObjectBeforeCreate(), а select FW_ObjectBeforeCreate() внутри rule позволено делать. Процедура FW_ObjectBeforeCreate всегда возвращает 'true' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2006, 16:35 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
уточнение "использовать perform .." в теле rule do instead ( perform func(); --так нельзя ) do instead ( select func(); --так можно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2006, 16:39 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
4321 ПРоблема в другом. она 1.1. перевыполняет все (VOLATILE) ф-ии, переданные ей (в New.field по дефаулту этих field), скоко бы раз они (New.field) не упоминались. Это известный баг, исправляться, как говорят, не будет. А можно это немножко поподробнее разяснить, а то что-то я смысл недогоняю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 17:09 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
JelisА можно это немножко поподробнее разяснить, а то что-то я смысл недогоняю? предположим, в id у вас оперделен DEFAULT mysuperfun('anyparam'). так вот, если вы в руле несколько раз напишете New.id, а при передаче в rule (в стейтменте, которое исертит) id не упоминалось - то каждое упоминание New.id вызовет новое срабатывание mysuperfun('anyparm'). подробнее - см например тут поиском. догонишь, и ссылку на описание траблы на родном сайте постгриса найдешь. и ответы разработчиков по ссылкам тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 17:28 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
Аааа.... догнал! Спасиба! :-) А если функция IMMUTABLE - то тогда тоже каждый раз вызов этой функции в рулесе будет? Хотя чего ее вызывать то, если параметр не изменился. Мда.... хотя некоторая логика в этом тоже есть, но странная : одним словом - "особенность" :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 18:40 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
А если NEW.id это nextval() то он тоже будет каждый раз новый браться в пределах одного рулеса???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 18:47 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
JelisА если NEW.id это nextval() то он тоже будет каждый раз новый браться в пределах одного рулеса???? гм . А поиск так и не попробовали? rule+default+nextval ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 19:10 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
попробовал переписать на ХП Rules: Код: plaintext 1. 2. 3. Функция: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. очевидно, что функция msaccess.countrygen должнв возращать одну и только одну запись из таблицы msaccess.countries. Если функция ничего не возвращает, то rules откатывает транзакцию. Для проверки добавил лишний insert в тело rules, вот так: Код: plaintext 1. 2. 3. 4. после чего записи (естественно) дублируются. Как именно вернуть из функции Setof данных, чтобы rules был доволен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 17:48 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
tadmin Код: plaintext 1. void не провали? tadmin очевидно????, что функция msaccess.countrygen должнв возращать одну и только одну запись из таблицы msaccess.countries. Если функция ничего не возвращает, то rules откатывает транзакцию. гм. у вас руле не на селект, а на инсерт. Почему ф-я внутре инсерта должна что-то возвращать? tadminКак именно вернуть из функции Setof данных, чтобы rules был доволен?если надо вернуть сетоф - возвращайте. только сначала объясните, почему он вам нужен. И какой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 18:02 |
|
||
|
несколько действий в rules
|
|||
|---|---|---|---|
|
#18+
4321 tadmin очевидно????, что функция msaccess.countrygen должнв возращать одну и только одну запись из таблицы msaccess.countries. Если функция ничего не возвращает, то rules откатывает транзакцию. гм. у вас руле не на селект, а на инсерт. Почему ф-я внутре инсерта должна что-то возвращать? эээ... я тут не прав, конечно. Rules on insert не обязан ничего возвращать, но если view, на которой висит rules on insert, смонтирована по ODBC в MS Access, то происходит следующее: - вставка данных в смонтированную таблицу - запускается rules on insert - запускается ХП - Акцесс не видит результатов вставки - rules откатывает все изменения, в том числе - изменения сделаные ХП. с чем я и столкнулся. 4321 tadminКак именно вернуть из функции Setof данных, чтобы rules был доволен?если надо вернуть сетоф - возвращайте. только сначала объясните, почему он вам нужен. И какой. Мне кажется, возможно необоснованно, что ODBC пугается, не получив данные после вставки. "размер поля недостаточен, чтобы принять добавляемы данные". Если я в тело rules on insert после вызова ХП добавлю insert явным образом (последний пример), то срабатывают обе вставки: добавил country='Russia', появилось две строки 'Russia' с разными идентификаторами, которые выдала ХП и insert в теле rules. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2007, 18:45 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=34225685&tid=2005808]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 440ms |

| 0 / 0 |
