powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Блокировка нескольких SQL запросов
25 сообщений из 27, страница 1 из 2
Блокировка нескольких SQL запросов
    #36754403
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте!
имеется такой код:
if is_prescription.time_prescription <> time('00:00:00') then
SELECT count() INTO :ll_count
FROM dba.prescriptions
WHERE pr_time = :is_prescription.time_prescription AND pr_date = :is_prescription.date_prescription AND pru_id = :is_prescription.id_doctor;
if ll_count > 0 then
MessageBox('Внимание!', 'По данным параметрам уже есть назначение.~nПовторите поиск назначения');
return -1;
end if
//проверка назначений
SELECT count() INTO :ll_count
FROM dba.results, dba.ak_list
WHERE dba.results.ak_list_id = dba.ak_list.ak_list_id AND dba.results.pr_time = :is_prescription.time_prescription AND dba.ak_list."date" = :is_prescription.date_prescription AND dba.results.pru_id = :is_prescription.id_doctor;
if ll_count > 0 then
MessageBox('Внимание!', 'По данным параметрам уже есть назначение.~nПовторите поиск назначения');
return -1;
end if
end if

SELECT max(pr_id) INTO :ll_pr_id
FROM dba.prescriptions;

if isNull(ll_pr_id) then ll_pr_id = 0;

ll_pr_id++

INSERT INTO dba.prescriptions(pr_id, pr_time, pr_date, pru_id, patient_family, patient_name, patient_middle, patient_birth, diag_in, patient_who_sent, patient_who_sent_num, plan, mp_id, phone)
VALUES(:ll_pr_id, :is_prescription.time_prescription, :is_prescription.date_prescription, :is_prescription.id_doctor, :is_prescription.family, :is_prescription.name, :is_prescription.middle, :is_prescription.birth, :is_prescription.diag_in, :is_prescription.who_sent, :is_prescription.who_sent_number, :is_prescription.plan, :is_prescription.id_procedure, :is_prescription.phone);

if SQLCA.SQLCode <> 0 then
MessageBox("Внимание!", "Ошибка назначения пациента на диагностику~n"+SQLCA.SQLErrText);
else
MessageBox('Информация', 'Назначение успешно сохранено');
Close(w_find_prescriptions);
end if

Собственно вопрос: как заблокировать таблицу или БД(Anywhere 9.0.1), чтобы пока выполняются операции от первого SELECT(проверка) до INSERT(вставка записи), другие пользователи не смогли добавить в таблицу строку(или изменить какую-то строку).
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754455
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.07.2010 14:44, МВА пишет:

> Собственно вопрос: как заблокировать таблицу или БД(Anywhere 9.0.1),
> чтобы пока выполняются операции от первого SELECT(проверка) до
> INSERT(вставка записи), другие пользователи не смогли добавить в таблицу
> строку(или изменить какую-то строку)

Этого делать не нужно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754509
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim2000,

хорошо, но тогда представим ситуацию. Делается запрос на проверку(SELECT), затем какой-то другой пользователь по этим данным делает insert. А мы еще раз делаем insert за этим. И выходит две дублирующие строки.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754734
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.07.2010 15:21, МВА пишет:

> хорошо, но тогда представим ситуацию. Делается запрос на
> проверку(SELECT), затем какой-то другой пользователь по этим данным
> делает insert. А мы еще раз делаем insert за этим. И выходит две
> дублирующие строки.

Навесить уникальный индекс религия не позволяет ;)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754763
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim2000,

не религия, а логика. Просто одинаковые строки могут быть.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754773
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из условия ясно, что если time = 00:00, то таких одинаковых строк может много.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754786
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.07.2010 16:40, МВА пишет:

> Из условия ясно, что если time = 00:00, то таких одинаковых строк может
> много.

Ты действительно думаешь, что я буду читать код, который ты даже не
сподобился никак отформатировать ;)? Тем более что, судя по последнему
абзацу, в нём нет совершенно ничего интересного .
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754839
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim2000,
там прямо в первой же строке написано условие. Я не прошу читать, а привел как пример. Вопрос же написал словами. И спросил про блокировку, а не как индексы и куда вставлять. Про это я давно сам подумал и поставил бы.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754949
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МВА,

Это вопрос скорее по Anywhere 9.0.1.
Не знаю, есть ли там реализация
LOCK TABLE IN EXCLUSIVE MODE.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754961
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ikir,

да вот и я так пытался, но билдер отказывается это делать.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754978
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МВАIkir,

да вот и я так пытался, но билдер отказывается это делать.

А что говорит?
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754986
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ikir,
я писал это в билдере, а он вообще не понимал что я хочу.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36754993
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МВАIkir,
я писал это в билдере, а он вообще не понимал что я хочу.
Напишите через Execute immediate
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755023
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.07.2010 17:32, Ikir пишет:

> Это вопрос скорее по Anywhere 9.0.1.
> Не знаю, есть ли там реализация
> LOCK TABLE IN EXCLUSIVE MODE.

Есть с семёрки, правда, EXCLUSIVE MODE требует DBA Authority. Но стоит
ли учить автора писать отстой ;)?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755070
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Локшин Марк,

я написал вот так: EXECUTE IMMEDIATE LOCK TABLE dba.prescriptions IN SHARE MODE.
Что не так?
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755083
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МВАЛокшин Марк,

я написал вот так: EXECUTE IMMEDIATE LOCK TABLE dba.prescriptions IN SHARE MODE.
Что не так?
Синтаксис не так. В виде текста надо.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755107
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МВА
я написал вот так: EXECUTE IMMEDIATE LOCK TABLE dba.prescriptions IN SHARE MODE.
Что не так?

Ну во-первых вам нужна EXCLUSIVE MODE
Во-вторых, насколько я помню LOCK TABLE должен указываться только внутри транзакции, то есть

BEGIN WORK
LOCK TABLE
COMMIT или ROLLBACK

в третьих какой SQLCODE после этого EXECUTE

PS to Дим2000
а за последствия мы не отвечаем )))))
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755125
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
22.07.2010 18:17, Ikir пишет:

> Во-вторых, насколько я помню LOCK TABLE должен указываться только внутри
> транзакции

ASA по умолчанию работает в chained mode, т.е. транзакцию явно открывать
не нужно. Вряд ли у топикстартера он отключён.

> PS to Дим2000
> а за последствия мы не отвечаем )))))

Меня бы за аналогичную идею просто пришибли . Молча.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755140
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Локшин Марк,

т.е. вот: EXECUTE IMMEDIATE 'LOCK TABLE dba.prescriptions IN EXCLUSIVE MODE'
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755145
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и Code возвращает 0. Но блокировки не происходит.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755271
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю есть ли в 9, но в 11 версии есть SELECT ... FOR UPDATE.
Если есть, то это может спасти отца русской демократии.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755400
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МВАВсем здравствуйте!
имеется такой код:
...
Собственно вопрос: как заблокировать таблицу или БД(Anywhere 9.0.1), чтобы пока выполняются операции от первого SELECT(проверка) до INSERT(вставка записи), другие пользователи не смогли добавить в таблицу строку(или изменить какую-то строку).
[offtop]Прошу прощения, но все же... Вы, случайно, не здесь работаете? [/offtop]
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36755658
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dim2000
22.07.2010 15:21, МВА пишет:

> хорошо, но тогда представим ситуацию. Делается запрос на
> проверку(SELECT), затем какой-то другой пользователь по этим данным
> делает insert. А мы еще раз делаем insert за этим. И выходит две
> дублирующие строки.

Навесить уникальный индекс религия не позволяет ;)?

МВАDim2000,

не религия, а логика. Просто одинаковые строки могут быть .

Ну а Вам, что и предлагают, навесить уникальный индекс, на дубляж инсерт не произойдет, а вот обработка ошибки БД по номеру, это уж Ваша реализация.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36756130
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99,

нет, не там.
...
Рейтинг: 0 / 0
Блокировка нескольких SQL запросов
    #36756138
МВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maxATC,

вот именно, не пройдет. А должно проходить, когда time = 00:00. Или я мысль не могу уловить.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Блокировка нескольких SQL запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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