powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Фокс и Оракл
23 сообщений из 23, страница 1 из 1
Фокс и Оракл
    #34742963
Hayko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добый день

Как можно из фокса блокироварь табличку/запись в Оракле?

У меня клиенты одновременно создают разные документы которые нужно нумеровать. В фоксе просто блокировал строчку в таблице DOCUMENTS на секунду ...

А если это не возможно или не правильно – как из ХП Оракла получить нужное значение поля...

заранее спасибо за ответы


П.с.
просьба методы типа REQUERY() не предлогать - у меня очень часто случаются ошибки - очень часто одновременно создаются документы с одинаковым номером ...
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34743038
mvictor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если проблема только в нумерации (последовательной), то у Oracle есть SEQUENCE
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34743235
Hayko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так как типы документов не фиксированы - они создаются пользователем, для меня очень трудно будет написать код для создания сиквенса для каждого документа из фокса ...

а таблица documents иммеет структуру:
id n(10), docprefix c(10), docno n(10), docpost c(10) , descritpion c(30),type n(1) ...

и работает просто update documents set docno=docno+1 where id=_id_from_list
так как пользователи активно создают документы, иногда 2 пользователя могут получить один и тот же номер документа.

а если будет блокировка или же update будет в ХП с возвратом значения в Фокс, проблеммы не будет
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34743305
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Haykoтак как типы документов не фиксированы - они создаются пользователем, для меня очень трудно будет написать код для создания сиквенса для каждого документа из фокса ...

а таблица documents иммеет структуру:
id n(10), docprefix c(10), docno n(10), docpost c(10) , descritpion c(30),type n(1) ...

и работает просто update documents set docno=docno+1 where id=_id_from_list
так как пользователи активно создают документы, иногда 2 пользователя могут получить один и тот же номер документа.

а если будет блокировка или же update будет в ХП с возвратом значения в Фокс, проблеммы не будет

кто-то кого-то не понимает..
Вам нужно, чтобы номера документов следовали строго по порядку???
то есть 1-2-3---125-126....
или же Вам нужно просто, чтобы номер документа был уникален?

если 2-й случай - то СИКВЕНСЫ и никакого кода по созданию их писать не надо....
Но, если действительно нужно именно по порядку - то надо думать....
в любом случае
Код: plaintext
update documents set docno=docno+ 1  where id=_id_from_list
звучит странно.. Вы создаете документы или редактируете их? Ваш пример указывает не на создание ИМХО :-)
Нл, если действительно нужно апдейтить.. то я бы посмотрел в сторону
Код: plaintext
SELECT.. for UPDATE
точно не укажу.. так как я дома... ночь и страшно и Оракла под рукой нету
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34743490
Hayko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
номера нужны по порядку

новый документ создаетця не в таблице DOCUMENTS - в другом, в DOCUMENTS хранится список типов документов который пользователь может создать и последние номера документов.

пример:
ID,desctiption,docno
1, Счет Фактура, 45
2, Кассовый чек, 12
3, Накладная, 98
4, Акт, 3
...

Новый "Акт" созданный пользователем должен иметь номер 4
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34748856
Hayko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
неужели программеры в этом саб-форуме так далеки от Оракла?

я-то думал простой вопрос...
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34748873
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Haykoнеужели программеры в этом саб-форуме так далеки от Оракла?

я-то думал простой вопрос...

Дык в чем проблема создать на каждый тип документа свой Sequence (например, в триггере на добавление типа)? Всякие самопальные вещи типа +1 - не для многопользовательской работы...
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34749146
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зайди на фоксклуб в решения
скац=чай там статью Журавлева
она хоть и старая но полезная
там много чего есть
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34749192
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Haykoнеужели программеры в этом саб-форуме так далеки от Оракла?

я-то думал простой вопрос...
Никто таблицы для подобных вещей в Oracle не блокирует - это большое "НИ-НИ"...

Ответ Вам дал FM32YO aka KID ...

P.S. Лично предпочитаю MS SQL Server...
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34749281
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В простом случае хватит сиквенсов. А вообще - учите pl/sql. Пишите хранимые процедуры, исполняемые на сервере. Вызывайте их из приложения в качестве API работы с таблицами.
________
Не дадим распространиться заразе политкорректности!
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34749386
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sequence не дадут ему номера документов по порядку (дадут ему всего-лишь уникальный номер), как бы этого не хотелось...
соответственно нужно реализовать какой-нибудь свой алгоритм..
например сохранение документа поручить ХП сервера, которая бы проверяла предыдущий номер, блокировала на мгновение таблицу и вставляла новый документ
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34749482
к
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
к
Гость
Читай мат. часть: блокировки, уровни изоляции, для начала... .
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34749935
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FM32YO aka KIDSequence не дадут ему номера документов по порядку (дадут ему всего-лишь уникальный номер), как бы этого не хотелось...
соответственно нужно реализовать какой-нибудь свой алгоритм..
например сохранение документа поручить ХП сервера, которая бы проверяла предыдущий номер, блокировала на мгновение таблицу и вставляла новый документ

Не понял фразу про "по порядку"
А про всякие вещи типа подобных блокировок в многопользовательской среде - это ерунда. Что будет, если один взял номер первым, а зафиксировал транзакцию десятым + откаты транзакций + многое другое.
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34750002
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55 FM32YO aka KIDSequence не дадут ему номера документов по порядку (дадут ему всего-лишь уникальный номер), как бы этого не хотелось...
соответственно нужно реализовать какой-нибудь свой алгоритм..
например сохранение документа поручить ХП сервера, которая бы проверяла предыдущий номер, блокировала на мгновение таблицу и вставляла новый документ

Не понял фразу про "по порядку"

по порядку - это ИМХО
1 человек в 10-00 начал набавить документ с порядковым номером 125

2 - другой человек начал на 2 минуты позже набивать следующий документ, который ДОЛЖЕН иметь стало быть номер 126, и никакой иной....

ИМХО Сиквенсы не дают номера по порядку... по крайней мере даже в однопользовательском режиме, сам пробовал - вставляешь одну строку, и через 5 минут другую (никто кроме меня не вставлял) и номера не по порядку, а каким-то слоучайным образом...
автору это не подходит, по крайней мере я так понял

tru55
А про всякие вещи типа подобных блокировок в многопользовательской среде - это ерунда. Что будет, если один взял номер первым, а зафиксировал транзакцию десятым + откаты транзакций + многое другое.

Я и говорю, что фиксацию ИМХО нужно поручить ХП.. то есть неважно как долго человек, создавший документ пил кофе не сохраняя его, при сохранении ХП должны проверить последний номер документа, заблокировать на очень короткое время (собственно на время отработки самой ХП, которое нужно свести к минимуму) таблицу с порядковыми номерами, вставить туда следующий - разблочить и все...

идея на коленке так сказать.. сам так никогда не делал и бо не было потребности в такой задаче
но видел приблуду ВБА + Оракл... увы там было (Максимум + 1)
дивелоперы видимо иначе не умели
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34750075
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. как согласуются эти две вещи?

по порядку - это ИМХО
1 человек в 10-00 начал набавить документ с порядковым номером 125

2 - другой человек начал на 2 минуты позже набивать следующий документ, который ДОЛЖЕН иметь стало быть номер 126, и никакой иной....


и


Я и говорю, что фиксацию ИМХО нужно поручить ХП.. то есть неважно как долго человек, создавший документ пил кофе не сохраняя его, при сохранении ХП должны проверить последний номер документа, заблокировать на очень короткое время (собственно на время отработки самой ХП, которое нужно свести к минимуму) таблицу с порядковыми номерами, вставить туда следующий - разблочить и все


На мой взгляд, если важен порядок фиксации документов, для этого надо использовать не номер, а date / timestamp

2. ИМХО Сиквенсы не дают номера по порядку... по крайней мере даже в однопользовательском режиме, сам пробовал - вставляешь одну строку, и через 5 минут другую (никто кроме меня не вставлял) и номера не по порядку, а каким-то слоучайным образом...

Честно говоря, сомнительное утверждение. Для подробного обсуждения нужен основательный test case. Реально это м.б. в некоторых случаях, если, например, sequence создана с опцией CACHE, в противном случае работа с последовательностями реализована точно так, как предлагается сделать руками - тогда какой смысл?

3. если речь идет о НЕПРЕРЫВНОЙ последовательности, то это реализовать очень сложно, т.к. возможны откаты транзакций, удаление документов, ввод документов задним числом и т.д. (сам когда-то с этим сталкивался при создании/сопровождении проги по ведению счетов-фактур)
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34750936
fm32yo......
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tru551. как согласуются эти две вещи?

по порядку - это ИМХО
1 человек в 10-00 начал набавить документ с порядковым номером 125

2 - другой человек начал на 2 минуты позже набивать следующий документ, который ДОЛЖЕН иметь стало быть номер 126, и никакой иной....


и


Я и говорю, что фиксацию ИМХО нужно поручить ХП.. то есть неважно как долго человек, создавший документ пил кофе не сохраняя его, при сохранении ХП должны проверить последний номер документа, заблокировать на очень короткое время (собственно на время отработки самой ХП, которое нужно свести к минимуму) таблицу с порядковыми номерами, вставить туда следующий - разблочить и все



перечитал ника не согласуется.. пятница блин


tru55
2. ИМХО Сиквенсы не дают номера по порядку... по крайней мере даже в однопользовательском режиме, сам пробовал - вставляешь одну строку, и через 5 минут другую (никто кроме меня не вставлял) и номера не по порядку, а каким-то случайным образом...

Честно говоря, сомнительное утверждение. Для подробного обсуждения нужен основательный test case. Реально это м.б. в некоторых случаях, если, например, sequence создана с опцией CACHE

вот не помню... но заметил, что в одной своей наработке просто добавлял в качествен теста записи с таблицу, и... первичный ключ, который как раз через сиквенс формировался увы не давал мне 1-2-3-4-5...
а пол каким-то причинам появлялись дырки в нумерации.
Точно не вспомню, но, вроде дырки появлялись, когда в первый день добавил 10 записей, и на следующий день добавлял еще.
На 100% утверждать, что делалось не стану, но дырки в нумерации были.
Однако для первичного ключа это совершенно никакого значения не имеет, поэтому дальне не вникал. Хотя, казалось бы, что сиквенс должен генерить строгую последовательность...

Однако, а где же автор? (а то мы тут рассуждаем....)
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34751281
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На 100% утверждать, что делалось не стану, но дырки в нумерации были.
Однако для первичного ключа это совершенно никакого значения не имеет, поэтому дальне не вникал. Хотя, казалось бы, что сиквенс должен генерить строгую последовательность


Э-э-э, нарушения порядка и пропуски - две большие разницы :)

Пропуски могут быть, например, кто-то сделал NEXTVAL, а потом ROLLBACK. Поскольку значения sequence в словаре изменяются в автономной транзакции, то на енто действие откат НЕ распространяется.

Или другой вариант. Создается последовательность со значением CACHE 20 (если в команде CREATE этот параметр не указываешь, то это значение по умолчанию). Это означает, что когда ты делаешь первый раз NEXTVAL, то 20 значений забираются в память (т.е. значение sequence в словаре увеличивается сразу на 20). Если еще раз делаешь NEXTVAL, то сначала ищется значения в памяти (в shared pool), если есть там, то берется оттуда. Т.е., если последовательность используется часто, то это ускоряет работу с ней. Однако, если обращение к ней происходит редко, то по алгоритму LRU она м.б. выгружена из памяти (для освобождения места другим объектам), тогда забранные в память значения потеряются. Аналогично будет потеря при перезагрузке сервера. Поэтому, если последовательность используется нечасто (например, первичный ключ какого-нибудь справочника), то лучше ее создавать с опцией NOCACHE
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34751808
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55
Э-э-э, нарушения порядка и пропуски - две большие разницы :)

Пропуски могут быть, например, кто-то сделал NEXTVAL, а потом ROLLBACK. Поскольку значения sequence в словаре изменяются в автономной транзакции, то на енто действие откат НЕ распространяется.

нет этого не было,и бо = сам писал = сам тестил, то есть никто больше не делал операций с данными


tru55
..... CACHE 20

.... NOCACHE

а вот это уже более вероятно, увы - было то давно, и я совершенно не помню КЭШ или НОКЭШ там было.....
выйду из отпуска гляну
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34751815
Фотография FM32YO aka KID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55
Создается последовательность со значением CACHE 20 (если в команде CREATE этот параметр не указываешь, то это значение по умолчанию).
...........
Поэтому, если последовательность используется нечасто (например, первичный ключ какого-нибудь справочника), то лучше ее создавать с опцией NOCACHE

скорев всего так и было
И конечно же я сиквенсы использую исключительно для Примари кеевских полей.

Вот о том, что ты сказал - не знал := стыдно
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34764629
4kin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HaykoДобый день

Как можно из фокса блокироварь табличку/запись в Оракле?

У меня клиенты одновременно создают разные документы которые нужно нумеровать. В фоксе просто блокировал строчку в таблице DOCUMENTS на секунду ...

А если это не возможно или не правильно – как из ХП Оракла получить нужное значение поля...

заранее спасибо за ответы


П.с.
просьба методы типа REQUERY() не предлогать - у меня очень часто случаются ошибки - очень часто одновременно создаются документы с одинаковым номером ...Читайте Тома Кайта "Оракле для професионалов" про транзакциии(том 1) и автономные транзакции (том 2), там все подробно изложенно и на русском (:

В руском хелпе по FoxPro (на foxclub) можно почитать про КурсорАдаптеры, безних никуда при разработки приложений типа клиент-сервер.
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34770399
Hayko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
большое спасибо за ответы
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34774772
exBB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Haykoтак как типы документов не фиксированы - они создаются пользователем, для меня очень трудно будет написать код для создания сиквенса для каждого документа из фокса ...

а таблица documents иммеет структуру:
id n(10), docprefix c(10), docno n(10), docpost c(10) , descritpion c(30),type n(1) ...

и работает просто update documents set docno=docno+1 where id=_id_from_list
так как пользователи активно создают документы, иногда 2 пользователя могут получить один и тот же номер документа.

а если будет блокировка или же update будет в ХП с возвратом значения в Фокс, проблеммы не будет

надо было сделать ключ на уникальность на стороне базы
alter table documents
add constraint C_documents _docno_UK unique (docprefix, docno)
потом если сделать нумерацию на автомате(без возможности ручного редактирования на клиенте) то триггер на вставку
create or replace trigger T_documents _BINSERT
before insert on documents for each row
begin
select max(d.docno)+1
into :new.docno
from documents d
where d.docprefix = :new.docprefix
;
end;
и блокировать ничего не надо...не для такого оракл придумывали чтоб делать блокировки целой таблицы
...
Рейтинг: 0 / 0
Фокс и Оракл
    #34779983
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сиквенс выдает значения ПО ПОРЯДКУ !!!

Я в таких ситуациях поступал следующим образом:

1: Заполнял переменные на клиенте
2: Отсылал инсерт на сервер с ключевым словом "Returning Pk_Doc into :locPk_Dok"
3: На сервере вешал тригер на инсерт, который заполнял PK_Doc из последовательности


т.е. Следуюшее значение последовательности запрашивалось только на кнопке "Сохратить"
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Фокс и Оракл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]