Конференция "Базы" » Передать BLOB без использования Temporary LOB
 
  • Кщд (27.04.11 15:06) [20]
    >ANB   (27.04.11 12:56) [19]
    было предложено gtt on commit delete rows
    автору по неведомой причине не подошло

    коли вариант отвергнут и PK создавать не хочется, то я бы подумал о том, что, запомнив PK при вставке, запись гарантированно можно удалить по этому значению PK. при фиксировании rowid при вставке, такой гарантии нет.
  • Игорь Шевченко © (27.04.11 18:57) [21]
    Кщд   (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]
    >Игорь Шевченко ©   (27.04.11 18:57) [21]
    Ляп в документации?

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:53140678334596
  • Игорь Шевченко © (28.04.11 11:44) [23]
    Кщд   (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.
  • Игорь Шевченко © (28.04.11 17:43) [24]
    разумеется, если страховаться от того, что между получением ROWID и его использованием над целевой таблицей будет выполнено неопределенное число DDL, то таки да, первичный ключ надежнее. Но медленнее.
  • Кщд (29.04.11 12:11) [25]
    >Игорь Шевченко ©   (28.04.11 11:44) [23]
    Да, насчет ляпа поспешил.
    Кайт говорит о неявных insert/delete.


    первичный ключ надежнее. Но медленнее.

    поэтому и предлагает в предикате использовать и то(rowid), и другое(PK) - это быстро и надежно.

    но, согласитесь, при наличии всего одной записи в таблице проигрыш при использовании только PK будет малосущественным

    спасибо, что ткнули в доку, - познавательно
  • Игорь Шевченко © (29.04.11 13:25) [26]

    > при наличии всего одной записи в таблице


    достаточно SELECT без WHERE ;)
  • Кщд (29.04.11 15:13) [27]
    ага)
    но очень не удивлюсь что при таком подходе, как у ТС, всё же будет больше одной записи)
    я всё равно за одновременную скорость и надежность, т.е. rowid + PK
  • Игорь Шевченко © (29.04.11 17:30) [28]

    > я всё равно за одновременную скорость и надежность, т.е.
    >  rowid + PK


    Если не затруднит, приведёте пример для ситуации ТС, когда ему rowid будет недостаточно ?

    Я напомню:

    "1) Создаете табличку в БД с полем BLOB
    2) Делаете в неё insert (без использования временного LOB локатора)
    3) А в процедуру передаете RowId, главное потом не забыть удалить в процедуре после считывания ненужную строчку"
  • Кщд (29.04.11 19:44) [29]
    >Игорь Шевченко ©   (29.04.11 17:30) [28]
    спорить не буду)
    если бы пришлось выбирать между вариантом, который работает в любых случаях, и тем, который может не сработать при определенных условиях - мой выбор первый из них
    а плюс один PK Oracle как-нибудь переживет)
    это моё сокровенное имхо))
 
Конференция "Базы" » Передать BLOB без использования Temporary LOB
Есть новые Нет новых   [134431   +15][b:0][p:0]