![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
NetShadow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
Собственно сабж такой, есть какие-то ещё способы подсчёта строк в Oracle, я знаю rownum и count(), а есть другие, в delphi DBGrid выводится результат запроса, туда можно добавлять строки, но их не должно быть больше 6-ти, если шесть то запрещать insert...
![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Если тебе нужно запрещать insert более шести записей в таблицу, то без блокировок этой таблицы, на уровне сервера, не обойтись.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Sqlninja |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 353 Регистрация: 15.5.2006 Где: San Francisco, CA Репутация: 13 Всего: 13 |
Я так понял, что речь идет о контроле поведения визуального компонента. Тогда это лучше сделать средствами самого Delphi. Даже если это после коммита происходит, лучше не гонять туда-сюда сетевой трафик, а считать какое нибудь клиентское свойство типа Dataset.Rowcount.
-------------------- It's better to burn out than to fade away. |
|||
|
||||
NetShadow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 20.9.2006 Репутация: нет Всего: нет |
спасибо всем кто пытался помочь, проблема была решена добавлением кода к триггеру на событие before update, insert...код примерно такой:
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Это не сработает, если вставка будет идти из разных сессий.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Тиль |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
Триггре на insert в таблицу не пробовал?
--------------------
Казалось нам пипец, оказалось что не казалось |
|||
|
||||
DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
но это не подходит для многосессионной рабыты с таблицами. о чем и говорил LSD. красивого решения пока нет, но кое что накидал. изврат №1(организовать вставку позиций в таблицу припомоши процедуры):
вобщем это не процедура, но идея понятна (for update nowait)... единственное что меня смущает в этом решении так это пробежка по курсору для подсчета количества позиций. изврат №2: если первичный ключ организован по сиквенсу то можно задать сиквенсу мин. и макс. значение нужного диапазона в нашем случае от 1..6. тогда при следеющем sq.nextval будет вываливаться ошибка о том что нельзя получить следеющее значение сиквенса, которую можно отловить и по русски сказать юзеру что он не прав... этот способ мне нравиться больше, но я не знаю есть ли потенциальные баги в этом способе, за иключением одного - если какой нить моньяк не увеличит макс. значение сиквенса. над третьим извратом пока думаю, так сказать изучаю возможности dbms_lock ... Это сообщение отредактировал(а) DimW - 14.3.2007, 11:37 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
А как во втором способе обработать удаление строк?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
DimW |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
вобщем начитался про dbms_lock и вот что получилось:
создадим табличку для проверки.
убедимся что у нас есть привилегия EXECUTE на пакет DBMS_LOCK. И тестим.
--------------------------- при таком подходе записи в таблицы будут вставляться последовательно, то есть блок снимается только при коммите текущей сессии. NetShadow, думаю то что тебе нужно, если очень хочится то блокировку можно вынести в стейтмент тригер на insert. NetShadow, а теперь можно узнать нафига тебе это нужно(не больше 6 записей в таблице )? ![]() Это сообщение отредактировал(а) DimW - 16.3.2007, 16:15 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Oracle" | |
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Oracle | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |