powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Мутирование таблицы
19 сообщений из 44, страница 2 из 2
Мутирование таблицы
    #39456230
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhuf-2-,
недостаточно. Если я хочу записаться на 11:30, то у меня не должно быть приемов с 11:10 по 11:50
сделай табличку "минуты приема клиента", на неё повесь уникальный ключ. вставляй туда 40 строк из селекта.
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456242
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhufнедостаточно. Если я хочу записаться на 11:30, то у меня не должно быть приемов с 11:10 по 11:50достаточно только уникального индекса.
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456272
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhuf,

на правах шутки
Код: plsql
1.
select trunc(sysdate,'hh') + numtodsinterval(trunc((sysdate - trunc(sysdate,'hh'))*72)*20,'minute') from dual
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456279
pastkhuf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
XMLer,
зачем? у меня уже работает с составным триггером
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456283
pastkhuf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,
объясните, пожалуйста, как? а то я не понимаю
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456285
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhufу меня уже работает с составным триггеромЭто тебе только кажется. Пока ты наивно думаешь, что твоя сессия - единственная во вселенной.
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456293
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicЭто тебе только кажется.
Ты не совсем прав, она и для нескольких сессий будет работать, просто не совсем так, как ожидается. :)
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456301
pastkhuf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
Хорошо, как мне тогда решить эту задачу, чтоб не было проблем в случае нескольких сессий?
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456307
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhuf,

самое простое триггер-вспомогательная_табличка-уникальный_индекс
(если вариант тупым округлением не прокатывает).
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456308
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhufХорошо, как мне тогда решить эту задачу, чтоб не было проблем в случае нескольких сессий? 20496827
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456325
pastkhuf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
простите, я начинаю не въезжать
Сергей Арсеньевpastkhuf,

(если вариант тупым округлением не прокатывает).
что округлять? время приема? зачем?

Сергей Арсеньевpastkhuf,

самое простое триггер-вспомогательная_табличка-уникальный_индекс.

Ну вот я стараюсь сам догадаться, но не получается. Для чего вспомогательная таблица, что там будет хранится? Что нам даст уникальный индекс?
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456338
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhuf,

ну самое простое же
во вспомогательной табличке хранятся минуты (truncate(sysdate,'MI')+(level-21)/24/60)), которые заняты каждым вносимым талончиком и пациент.
Соответственно индекс на ней. Что занята минута может быть не более одного раза. :)
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456346
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicpastkhufХорошо, как мне тогда решить эту задачу, чтоб не было проблем в случае нескольких сессий? 20496827 Я соврал про только . Древнее решение от orawish также ограничивает "непрерывность" интервалов, а другое решение использовать матвью.
Или есть вариант?
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456362
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упрощенный взгляд на проблему
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
create or replace type t_persondate as object (
  person number
 ,dt date
);
/

create or replace type tdate as table of t_persondate;
/

create or replace function pm20(person in number,p in date) return tdate
deterministic
is
 dt tdate;
begin
 select t_persondate(person,trunc(p+(level-1)/24/60,'MI')) bulk collect into dt from dual connect by level<22;
 return dt;
end;
/

create table test_t (
  person number not null
 ,dt date not null
 ,rg tdate
)
 NESTED TABLE rg store as test_t_store
;

create trigger test_t 
before insert or update on test_t 
for each row
begin
 :new.rg:=pm20(:new.person,:new.dt);
end;
/

create unique index test_t_ux on test_t_store(person,dt);

insert into test_t (person,dt)
 values (1,sysdate);

insert into test_t (person,dt)
 values (1,sysdate+21/24/60); 

insert into test_t (person,dt)
 values (1,sysdate+20/24/60);  
 
insert into test_t (person,dt)
 values (2,sysdate+11/24/60);  


...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456377
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhuf
Ну вот я стараюсь сам догадаться, но не получается. Для чего вспомогательная таблица, что там будет хранится? Что нам даст уникальный индекс?
Код: plsql
1.
2.
3.
 select :CLIENT_ID, :WHORE_ID, TRUNC((:VIZIT_DATE) + (LEVEL - 20)/ 1440, 'mi') 
 from dual
 connect by level <= 40
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456413
pastkhuf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Арсеньев, XMLer
Спасибо большое за подробный ответ! Я постараюсь все это понять, но, чувствую, мне нужно еще поучиться, иначе, если я продолжу тупить, я вас замучаю
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456523
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLer
Код: plsql
1.
2.
3.
 select :CLIENT_ID, :WHORE_ID, TRUNC((:VIZIT_DATE) + (LEVEL - 20)/ 1440, 'mi') 
 from dual
 connect by level <= 40


У Вас будут ложноположительно перекрываться диапазоны.
Например 12:10+19 и 12:48-19 это 12:29 но между 12:10 и 12:48 чуть больше 20 минут
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39456752
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastkhufSQL*Plus,
Ну мне же нужно предотвратить вставку, если пациент в это время на приеме!
Даже если так, я ж в составном триггере выполняю SELECT в after statement?
Для предотвращения вызывайте в триггере RAISE_APPLICATION_ERROR
и обрабатывайте получаемую ошибку.
...
Рейтинг: 0 / 0
Мутирование таблицы
    #39457092
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевУ Вас будут ложноположительно перекрываться диапазоны.
Например 12:10+19 и 12:48-19 это 12:29 но между 12:10 и 12:48 чуть больше 20 минут
Вы правы, больше 20 минут, а точнее 40 минут. ТС пишет:
pastkhuf-Если я хочу записаться на 11:30, то у меня не должно быть приемов с 11:10 по 11:50
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Мутирование таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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