Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
Здраствуйте. У меня есть PL-функция, в которой выполняется след. код: Код: plaintext 1. 2. есть ли гарантия, что функия вернет именно тот ид, который добавил я, а не кто-то другой. я слышал вроде, что выполнение функции - это отдельная транзакция, то есть по идее должно быть все нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 07:14 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
Приветствую если client_id типа serial или ты используешь sequence для присвоения ему значения воспользуйся функцией nextval('имя сиквенса') 100% получишь свой ид ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 08:16 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
Кабан Савраскинесть ли гарантия, что функия вернет именно тот ид, который добавил я, а не кто-то другой. Не факт!!! Только если уровень изоляции транзакция serializable!!! По умолчанию уровень изоляции Read Commited, а значит, если другая транзакция, выполняющая INSERT, скоммитилась между нашими INSERT и SELECT, то наш селект вернет именно его client_id. Если я не ошибаюсь, процедуры(функции) работают в вызвавшей их транзакции. Если нет явного указания транзакции (begin; commit;), то каждый запрос на клиенте - отдельная транзакция (с уровнем изоляции по умолчанию). В процедуре нельзя изменить уровень изоляции, значит либо все транзакции, где используется ф-ия, помечаешь Serializable, либо (если пара place_id,client_login уникальна) делаешь Код: plaintext lionsonесли client_id типа serial или ты используешь sequence для присвоения ему значения воспользуйся функцией nextval('имя сиквенса') Блин... Только догадался... Lionson ты абсолютно прав!!! Только функцию наверно имел в виду currval('имя сиквенса'). Тогда код выглядит: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 10:07 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
точно, извени ошибся конечно currval она отслеживает изменения только в пределах сессии и если к примеру ты ни разу ее не затронешь, то при вызове она ругнется, что де мол в данной сессии не было обращения к указанному сиквенсу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 12:58 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
В подобных случаях я предпочитаю делать таблицу WITH OIDS и в ХП делать get diagnostics r=RESULT_OID; select ... where oid=r; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 21:20 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
то есть то, что функция выполняется как отдельная транзакция не дает никаких гарантий, что код вернет нужный ид? спасибо всем за ответы. сделал currval ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 06:33 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
Radjamanто есть то, что функция выполняется как отдельная транзакция не дает никаких гарантий, что код вернет нужный ид? Да. Гарантии появятся (точнее могут появиться) как только будет установлен соответствующий уровень изолированности транзакции. А currval() - будет работать для любого уровня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2005, 10:15 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
Andrey Daeron Radjamanто есть то, что функция выполняется как отдельная транзакция не дает никаких гарантий, что код вернет нужный ид? Да. Гарантии появятся (точнее могут появиться) как только будет установлен соответствующий уровень изолированности транзакции. А currval() - будет работать для любого уровня. Интересно почему это? А если между первым и вторым селектом произошла вставка строки? Япредпочитаю вставлять данные в таблицу через функцию и там уже сам беру значение nextval(...). Соответственно возвращаю id или ошибку. Мне кажется так надежнее. Столкнулся с такой проблемой еще в мсскл,и решил больше не делать автоматику там где мне нужно будет получить идентификатор вставленной строки. Кстати можено ведь не serial тип устанавливать, а в значении по умолчанию делать nextval(...), тогдагде нужно будет вернуть значение ид, просто сам получаешь nextval изнужной последовательности и в ручную его вставляешь. В остальных случаях это делается автоматически. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.05.2005, 00:48 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
MaximZ Andrey Daeron currval() - будет работать для любого уровня. Интересно почему это? по оперделению. Читайте хелп по currval() MaximZ Япредпочитаю еще один любитель трусы через голову натягивать. Стоит ли навязывать своих тараканов другим ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 10:57 |
|
||
|
есть ли гарантия?
|
|||
|---|---|---|---|
|
#18+
MaximZ Япредпочитаю вставлять данные в таблицу через функцию и там уже сам беру значение nextval(...). Соответственно возвращаю id или ошибку. Мне кажется так надежнее. Столкнулся с такой проблемой еще в мсскл,и решил больше не делать автоматику там где мне нужно будет получить идентификатор вставленной строки. Кстати можено ведь не serial тип устанавливать, а в значении по умолчанию делать nextval(...), тогдагде нужно будет вернуть значение ид, просто сам получаешь nextval изнужной последовательности и в ручную его вставляешь. В остальных случаях это делается автоматически. Вы меня пугаете. Столкнулся с такой проблемой еще в мсскл,и решил больше не делать автоматику там где мне нужно будет получить идентификатор вставленной строки. @@IDENTITY отменили? Полный аналог curval-а. Если с ним были какие-то проблемы, то расскажите о них - мне интересно. Хотя, пожалуй, этот вопрос из другой ветки.))) Кстати можено ведь не serial тип устанавливать, а в значении по умолчанию делать nextval(...), А что по вашему SERIAL делет? То же самое - создаёт сиквенс и вставляет соответствующую строку в дефаулт поля. Зачем же это делать руками? Япредпочитаю вставлять данные в таблицу через функцию При сотне таблиц в схеме можно подзадолбаться, ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2005, 14:24 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33037317&tid=2007277]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 252ms |
| total: | 453ms |

| 0 / 0 |
