Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как найти свежевставленную запись?  [new]
dubdubom
Member

Откуда:
Сообщений: 27
Добрый время суток всем! Сломал голову над очередной задачкой.
суть:
1.запускается wraped процедура, добавляющая запись в таблицу tt. одно из полей записи - id,уникальное поле, значение генериться в самой процедуре, по неизвестному алгоритму(похоже на sequence, но соответствующую последовательность найти не удалось

2.требуется получить id свежевставленной записи

ничего другого , как определять запись по max(rowid), не придумалось, но этот самый max вычисляется недопустимо долго. есть ли какое-нить быстрое решение?
30 июл 08, 17:48    [6006375]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
dubdubom
Добрый время суток всем! Сломал голову над очередной задачкой.
суть:
1.запускается wraped процедура, добавляющая запись в таблицу tt. одно из полей записи - id,уникальное поле, значение генериться в самой процедуре, по неизвестному алгоритму(похоже на sequence, но соответствующую последовательность найти не удалось

2.требуется получить id свежевставленной записи

ничего другого , как определять запись по max(rowid), не придумалось, но этот самый max вычисляется недопустимо долго. есть ли какое-нить быстрое решение?


1. Есть предположение что чем больше ЫД тем "новее" запись тем более на вставку.
Надо найти того кто знает алгоритм и спросить, либо провести эксперимент2. .

1.2. max(rowid) вам ничего не даст.
30 июл 08, 18:06    [6006513]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
dubdubom
Member

Откуда:
Сообщений: 27
Lecter
1.2. max(rowid) вам ничего не даст.

если не сложно - почему?
30 июл 08, 18:09    [6006535]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
dubdubom
Member

Откуда:
Сообщений: 27
dubdubom
Lecter
1.2. max(rowid) вам ничего не даст.

если не сложно - почему?
дошло. ступил.
30 июл 08, 18:17    [6006590]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
givanov
Member

Откуда:
Сообщений: 757
Проще и быстрее считать эту запись по уникальному ключу.
Если такого ключа нет - остается только просить автора процедуры возвращать ID этой записи.
30 июл 08, 18:21    [6006610]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
dubdubom
Member

Откуда:
Сообщений: 27
2 Lecter givanov
спасибо.
все плохо)
30 июл 08, 18:26    [6006643]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
DexterI
Member

Откуда: Калифорния наша!!!
Сообщений: 31055
givanov
Проще и быстрее считать эту запись по уникальному ключу.
Если такого ключа нет - остается только просить автора процедуры возвращать ID этой записи.

Теоритически можно еще добавить в таблицу поле типа DATE и процедурой заполнять это поле SYSDATE'ом. Потом можно по max(date) впринципе вылавливать.
30 июл 08, 18:42    [6006690]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
DexterI
givanov
Проще и быстрее считать эту запись по уникальному ключу.
Если такого ключа нет - остается только просить автора процедуры возвращать ID этой записи.

Теоритически можно еще добавить в таблицу поле типа DATE и процедурой заполнять это поле SYSDATE'ом. Потом можно по max(date) впринципе вылавливать.

в принципе нельзя...
30 июл 08, 18:44    [6006694]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
YAP
Member

Откуда: Киев
Сообщений: 2116
поставить на таблицу триггер и фиксировать через него необходимую инфу где-нить, типа ид, время вставки и т. д.
30 июл 08, 18:48    [6006707]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
DexterI
Member

Откуда: Калифорния наша!!!
Сообщений: 31055
Двоюшник
в принципе нельзя...

Спорить не буду, но объясни, пожалуйста почему, если не трудно?
30 июл 08, 18:48    [6006709]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
Lecter
Member

Откуда: Киев
Сообщений: 2032
DexterI
Двоюшник
в принципе нельзя...

Спорить не буду, но объясни, пожалуйста почему, если не трудно?

Согласен, ведь можна понять триггер на инсерт и вбивать в поле дату-время вставки.
30 июл 08, 18:51    [6006718]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
DexterI
Member

Откуда: Калифорния наша!!!
Сообщений: 31055
Lecter
DexterI
Двоюшник
в принципе нельзя...

Спорить не буду, но объясни, пожалуйста почему, если не трудно?

Согласен, ведь можна понять триггер на инсерт и вбивать в поле дату-время вставки.

+1

Едиственное в чем я был не прав, это в том, что процедурой предлагал вставлять (промустил, что она завраплена), но тригер в данном случае проблему решает.
30 июл 08, 18:54    [6006724]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
ПрограммистыВсеЗакрыли
Guest
Возможно изменять триггеры таблицы запрещено
30 июл 08, 19:11    [6006776]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
DGabadulin
Member

Откуда:
Сообщений: 78
Я так думаю что если нужно искать новые записи относительно какойто даты (после известной даты) и база 10-ка, то можно юзать flashback и сравнивать результаты запросов
30 июл 08, 19:12    [6006778]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
DGabadulin
Я так думаю что если нужно искать новые записи относительно какойто даты (после известной даты) и база 10-ка, то можно юзать flashback и сравнивать результаты запросов

херасе метода ;)....какие там гланды через ж...
30 июл 08, 19:25    [6006805]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63939
Блог
DexterI
Теоритически можно еще добавить в таблицу поле типа DATE

А может, проще использовать ROWSCN и не изобретать велосипедов?
30 июл 08, 19:29    [6006815]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
Двоюшник
Member

Откуда: Киев
Сообщений: 1135
DexterI
Двоюшник
в принципе нельзя...

Спорить не буду, но объясни, пожалуйста почему, если не трудно?

если в одно и тоже время вставить две записи?
или вы не верите в такое? ;)
мало того что даже систаймстамп, не раз уже обсуждалось, что не уникален :)
30 июл 08, 19:35    [6006831]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
Elic
Member

Откуда:
Сообщений: 29978
softwarer
А может, проще использовать ROWSCN и не изобретать велосипедов?
Это гарантированный FTS.
Кроме того, без rowdependency новым будет целый блок.

_______________________________________________________________

Двоюшник
если в одно и тоже время вставить две записи?
Так это не наш случай :
dubdubom
процедура, добавляющая запись
30 июл 08, 19:46    [6006880]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
_мухомор
Guest
1) Повесить на таблицу Materialized view и Materialized view log. Дальше либо изощряться с анализом лога, либо повесить триггер на Insert в MV и получать результат.
2) Использовать Oracle Streams
30 июл 08, 19:54    [6006906]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63939
Блог
Elic
Это гарантированный FTS

И? "Дата вставки" ровно то же самое - поскольку не позволяет выделить конкретную запись текущей сессии, может быть использована только для операций типа "выгрузить все новые". А для них, особенно с учетом update-ов, FTS вовсе не является безусловно неподходящим.

Elic
Кроме того, без rowdependency новым будет целый блок.

Кто-то мешает внедрить rowdependency?
30 июл 08, 19:58    [6006916]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
Elic
Member

Откуда:
Сообщений: 29978
softwarer
FTS вовсе не является безусловно неподходящим.
dubdubom
max(rowid) ... вычисляется недопустимо долго.


softwarer
Кто-то мешает внедрить rowdependency?
Например, необходимость пересоздания таблицы.
30 июл 08, 20:17    [6006955]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
RA\/EN
Member

Откуда:
Сообщений: 3658
dubdubom
Добрый время суток всем! Сломал голову над очередной задачкой.
суть:
1.запускается wraped процедура, добавляющая запись в таблицу tt. одно из полей записи - id,уникальное поле, значение генериться в самой процедуре, по неизвестному алгоритму(похоже на sequence, но соответствующую последовательность найти не удалось

2.требуется получить id свежевставленной записи

ничего другого , как определять запись по max(rowid), не придумалось, но этот самый max вычисляется недопустимо долго. есть ли какое-нить быстрое решение?

1. ora_rowscn
2. триггер с логгированием или raise_application_error(-20000,:new.id) (самое простое)
3. dbms_logminer
4. для эстетов - поиск и дамп блока из UNDO для выковыривания rowid вставленной записи
5. rewrap/unwrap
6. трассировка сессии 4-го уровня (а вдруг)
7. копия таблицы до процедуры и сравнение результатов
... и еще дофига способов
30 июл 08, 20:36    [6006986]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
RA\/EN
Member

Откуда:
Сообщений: 3658
RA\/EN
... и еще дофига способов

Да, еще дажу у заврапленной процедуры можно поглядеть зависимые объекты.
30 июл 08, 20:41    [6006993]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
RA\/EN
Member

Откуда:
Сообщений: 3658
RA\/EN
RA\/EN
... и еще дофига способов

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

Вернее, объекты, от которых она зависит.
30 июл 08, 20:41    [6006994]     Ответить | Цитировать Сообщить модератору
 Re: как найти свежевставленную запись?  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63939
Блог
Elic
softwarer
FTS вовсе не является безусловно неподходящим.
dubdubom
max(rowid) ... вычисляется недопустимо долго.

И? "Недопустимо долго для каждой записи" вовсе не эквивалентно "недопустимо долго для массовой выгрузки". Почему дата ни хрена не даст для "по каждой записи", объяснили до меня.

Elic
softwarer
Кто-то мешает внедрить rowdependency?
Например, необходимость пересоздания таблицы.

И чем же она столь принципиально мешает в любой (поскольку неизвестная) ситуации? Признаться, меня удивляют Ваши последние заявления.
30 июл 08, 23:34    [6007340]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить