|
|
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
Задачка такая есть. Существует таблица с ключами (хэш ключей). Есть функция getkey(), которая инкрементирует значение ключа и возвращает новое значение. Так вот. Часто приходится получать ключи, но, к сожалению, не могу понять - как это сделать из процедуры. Т.е. если в некоей процедуре сделать так: Код: plaintext 1. 2. 3. 4. 5. 6. то все newkey'и получат одно и то же значение ключа. Я так понимаю, что изменения в хеше ключей не Commit'ятся после первого вызова функции. Commit в самой функции не помогает, да и нежелателен он - мало ли что дальше произойдет. Приходится пихать данные во временную таблицу, бегать курсором по ней и получать в цикле ключи. Так работает (почему-то) Что можно придумать, чтобы функция ВСЕГДА возвращала правильный ключ? Или это невозможно в принципе? Атомарная операция? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 16:41 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
Использовать NEWID() вместо getkey()? Можно попробовать запихнуть NEWID() или NOW() внутрь твоей getkey(), впрочем не уверен что поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 17:21 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 18:40 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
NOT DETERMINISTIC, говоришь? ээээ... у меня этой опции АСА еще нет. Другие варианты есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2004, 20:18 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
Попробуйте сделать в функции GetKey() параметр и передавать туда любое поле с запроса. Тогда по идее ASA должна сообразить, что функцию нужно вызывать для каждой записи. Если не сообразит, значит нужно все как есть оставить на курсорах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2004, 00:08 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
Параметр там уже есть (мне же неинтересно получать новые ключи только для одной таблицы, таблиц-то много :) К сожалению, не работает :( А как воообще народ делает? Может, есть более гибкие решения с хэшем ключей? Или все юзают автоинкременты? (ни за что не поверю!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2004, 00:49 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
Можно попробовать вставить GetKey() в DEFAULT столбца таблицы и не указывать его в INSERT. Если в Вашей версии ASA поддерживается инициализация полей в триггерах BEFORE INSERT, то можно в таком триггере инициализировать поле значением этой функции. авторА как воообще народ делает? Может, есть более гибкие решения с хэшем ключей? Или все юзают автоинкременты? (ни за что не поверю!) Именно юзаю инкременты :) Если сильно бы прижало, то использовал бы GUID, но с хэшем ключей не стал бы связываться, по моему больше геммора, чем толку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2004, 07:15 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
NOT DETERMINISTIC появился в 8.0.3 чтобы заставить коректно генерировать ключи ранее приходилось передавать как параметр уникальное значение по текущей выборке(чтобы оно менялось от записи к записи) и впринципе не важно что, главное его изменение, что вызывало перезагрузку функции Удачи ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2004, 09:14 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
Или все юзают автоинкременты? Именно их мы и юзаем :). "Зачем делать сложным, что проще простого". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2004, 10:19 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
L0cat0rNOT DETERMINISTIC появился в 8.0.3 8.0.1 (RTFM :)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2004, 10:20 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
L0cat0r, большое спасибо, этот способ действительно работает. Я добавил этой функции параметр dummy и передаю Number(). Все заработало. Интересно, а как вы до этого дошли? Методом научного тыка или дедуктивно, изучая документацию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2004, 20:58 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
mustliveЯ добавил этой функции параметр dummy и передаю Number(). Все заработало. Кстати, о какой версии ASA идёт речь? Или это Очень Страшная Тайна ? Интересно, а как вы до этого дошли? Методом научного тыка или дедуктивно, изучая документацию? А какое ещё есть объяснение для ситуации "функция должна вызываться много раз, но вызывается один раз"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2004, 14:45 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
автор Кстати, о какой версии ASA идёт речь? Или это Очень Страшная Тайна ? 5-я. Но мне кажется, это работает (или не работает, смотря с какой точки зрения смотреть) и в более новых. Если не использовать NOT DETERMINISTIC. автор А какое ещё есть объяснение для ситуации "функция должна вызываться много раз, но вызывается один раз"? Не знаю. Не путайте, она вызывается не один раз, т. е. честно отрабатывает. Если вставить например message в ее тело и вызвать ее в цикле, то сообщение будет честно вылезать на каждый вызов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2004, 23:02 |
|
||
|
ASA-как поступить? Одно черное в белый горох, другое - белое в черный
|
|||
|---|---|---|---|
|
#18+
mustlive автор А какое ещё есть объяснение для ситуации "функция должна вызываться много раз, но вызывается один раз"? Не знаю. Не путайте, она вызывается не один раз, т. е. честно отрабатывает. Если вставить например message в ее тело и вызвать ее в цикле, то сообщение будет честно вылезать на каждый вызов. Похоже что при работе с функцией для ускорения ASA кеширует где-то (?)последние входящие переменные и результат, и если новый вызов происходит по закешированным входящим - то исходящий результат берется из кеша (?!!) Вызов в цикле даст message, а вот на выборке его даст только точка входа (первая запись) или изменение вх. параметра NOT DETERMINISTIC отрубает это кеширование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2004, 10:25 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32719446&tid=2014184]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 181ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...