-
>ANB (27.04.11 12:56) [19] было предложено gtt on commit delete rows автору по неведомой причине не подошло
коли вариант отвергнут и PK создавать не хочется, то я бы подумал о том, что, запомнив PK при вставке, запись гарантированно можно удалить по этому значению PK. при фиксировании rowid при вставке, такой гарантии нет.
-
Кщд (27.04.11 15:06) [20] "Oracle guarantees that as long as the row exists, its rowid does not change. These performance and stability qualities make rowids useful for applications that select a set of rows, perform some operations on them, and then access some of the selected rows again, perhaps with the purpose of updating them" http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#i6732
-
-
Кщд (28.04.11 07:27) [22]
> Ляп в документации?
нет.
"A rowid is assigned to a row upon insert and is imutable (never changing) unless the row is deleted and re-inserted (meaning it is another row, not the same row!)"
все остальные случаи, упоминаемые Кайтом, относятся скорее к хранению rowid.
-
разумеется, если страховаться от того, что между получением ROWID и его использованием над целевой таблицей будет выполнено неопределенное число DDL, то таки да, первичный ключ надежнее. Но медленнее.
-
>Игорь Шевченко © (28.04.11 11:44) [23] Да, насчет ляпа поспешил. Кайт говорит о неявных insert/delete.
первичный ключ надежнее. Но медленнее.
поэтому и предлагает в предикате использовать и то(rowid), и другое(PK) - это быстро и надежно.
но, согласитесь, при наличии всего одной записи в таблице проигрыш при использовании только PK будет малосущественным
спасибо, что ткнули в доку, - познавательно
-
> при наличии всего одной записи в таблице
достаточно SELECT без WHERE ;)
-
ага) но очень не удивлюсь что при таком подходе, как у ТС, всё же будет больше одной записи) я всё равно за одновременную скорость и надежность, т.е. rowid + PK
-
> я всё равно за одновременную скорость и надежность, т.е. > rowid + PK
Если не затруднит, приведёте пример для ситуации ТС, когда ему rowid будет недостаточно ?
Я напомню:
"1) Создаете табличку в БД с полем BLOB 2) Делаете в неё insert (без использования временного LOB локатора) 3) А в процедуру передаете RowId, главное потом не забыть удалить в процедуре после считывания ненужную строчку"
-
>Игорь Шевченко © (29.04.11 17:30) [28] спорить не буду) если бы пришлось выбирать между вариантом, который работает в любых случаях, и тем, который может не сработать при определенных условиях - мой выбор первый из них а плюс один PK Oracle как-нибудь переживет) это моё сокровенное имхо))
|