powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Апдейт поля BLOB
25 сообщений из 54, страница 2 из 3
Апдейт поля BLOB
    #39770648
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chavchipavперед тем как писать здесь, я прочитал документацию, но там не нашел описание поведения
как в частности описал я.

Плохо искал. Стандартный паттерн для старых приложений: вставка EMPTY_LOB, а потом его
изменение через OCI.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39770663
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicStaxімхо, если он fire , то должен отрабатывать как с update и dbms_lob.getlength>0Ты безнадёжен.

есть такое

раз о блобах зашло
не могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства

.....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39770668
chavchipav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

понятно, спасибо!
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39770761
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxне могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства


А ты попробуй:

Код: 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.
SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL;
  7      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  8  END;
  9  /
DECLARE
*
ERROR at line 1:
ORA-22920: row containing the LOB value is not locked
ORA-06512: at "SYS.DBMS_LOB", line 1163
ORA-06512: at line 7


SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL
  7        FOR UPDATE;
  8      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  9  END;
 10  /

PL/SQL procedure successfully completed.

SQL> 



SY.
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39770770
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxне могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства


Локатор по опредeлению да и переводе есть местонахождение. Ты ведь не удивляешься что навигатор в твоем телефоне или машине знает ктo ты и где ты есть.

SY.
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39770802
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYStaxне могу понять как DBMS_LOB узнает что строка заблокирована?

мне ето уже не надо, чисто из любопытства


А ты попробуй:

Код: 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.
SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL;
  7      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  8  END;
  9  /
DECLARE
*
ERROR at line 1:
ORA-22920: row containing the LOB value is not locked
ORA-06512: at "SYS.DBMS_LOB", line 1163
ORA-06512: at line 7


SQL> DECLARE
  2      V_C CLOB;
  3  BEGIN
  4      SELECT  C
  5        INTO  V_C
  6        FROM  TBL
  7        FOR UPDATE;
  8      DBMS_LOB.WRITEAPPEND(V_C,3,'DEF');
  9  END;
 10  /

PL/SQL procedure successfully completed.

SQL> 



SY.

SY я ето знаю/знал

вопрос как он (DBMS_LOB) определяет что value is not locked?

....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39770816
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxкак он (DBMS_LOB) определяет что value is not locked?У тебя сложности c переводом locator на украинский или нужны технические детали, где именно хранится lock строки?
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39770929
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Staxкак он (DBMS_LOB) определяет что value is not locked?У тебя сложности c переводом locator на украинский или нужны технические детали, где именно хранится lock строки?

и то, и то
я переводил locator как указатель
гугль по другому
Код: plaintext
1.
2.
3.
Іменник
локатор - locator
землемер - surveyor, locator, land-surveyor

мне больше интересно как (с помощью чего) dbms_lob узнает что запись заблокирована (захвачена)

....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771020
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxинтересно как (с помощью чего) dbms_lob узнает что запись заблокирована
Мнэээ... ему SqlEngine скажет, если оно не так. Как и OCI-клиенту. SY же показал.
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771023
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxинтересно как (с помощью чего) dbms_lob узнает что запись заблокирована
Мнэээ... ему SqlEngine скажет, если оно не так. Как и OCI-клиенту. SY же показал.

если чесно, то я не понял что показал SY

чтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна,
поетому и интересно каким механизмом dbms_lob проверяет наличие блокировки

....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771031
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxчтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна,
Если только читать - не обязательна.
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771053
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxчтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна,
Если только читать - не обязательна.
и писать (dbms_lob.write) тоже, главное чтоб запись было залочена
вот етот момент мне и интересен, как dbms_lob.write проверяет

.....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771060
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxкак dbms_lob.write проверяет
Берет и пишет. А SQL engine его посылает, как показывал SY.
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771085
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

табличка с одной строкой (для упрощения)
Код: 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.
SQL> set lines 80
SQL> desc stax_blob
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER(38)
 B                                                  BLOB

SQL> declare
  2    v_data raw(32000);
  3    V_bb blob;
  4    v_id int;
  5  begin
  6    commit;
  7    select id,b into v_id,v_bb from stax_blob ; --for update of id;
  8    --получили локатор незаблокированной записи
  9    update stax_blob set id=1;
 10    --заблокировали
 11    v_data := utl_raw.cast_to_raw(rpad('Stax',v_id*10,'!'));
 12    --откуда знает что уже заблакировали?
 13    dbms_lob.write(
 14      lob_loc => v_bb,
 15      amount => utl_raw.length(v_data),
 16      offset => 1,
 17      buffer => v_data
 18      );
 19  end;
 20  /

PL/SQL procedure successfully completed.

SQL> select * from stax_blob;

        ID B
---------- --------------------
         1 53746178212121212121
           21212121212121212121
           21212121212121212121
           21212121212121212121
           21212121212121212121
           21212121212121212121


SQL>



....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771096
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax--откуда знает что уже заблакировали?

Проверили блокировку на записи, на которую указывает локатор. Оттуда и знает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771103
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovStax--откуда знает что уже заблакировали?

Проверили блокировку на записи, на которую указывает локатор. Оттуда и знает.


етого я и не знаю (туплю, на ручнике)
как проверяет? какими средствами?

.....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771116
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxкакими средствами?dbms_lob по локатору определяет роуид строки, по роуид номера файла и блока, где лежит строка. Делает дамп блока в трейс, регекспами вытаскивает из трейса заголовок строки, оттуда берет номер позиции в itl, из itl выкусывает флаг lock=1.
Или тебе прислать машинные коды oracle.exe на 400 мб?
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771132
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

спасибо

теперь понятно,
ето внутренний (закрытый) механизм оракля

на sql, pl/sql етого не добится

я пытался с имитировать средствами языка sql

....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771134
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxимитировать средствами языка sql
Ммм?
Имитировать - так имитировать.
Блокировать строку, можно даже dbms_lock для большей имитационности :).
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771143
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

не блокировать, а проверить заблокирована ли
skip lock/time, автономка, savepoint, что-то еще

теперь я верю, что используется внутренний механизм

просто надеялся что проверяется с помощью "sql"

еще раз спасибо, мое любопытство удовлетворено

.....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771161
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxпроверить заблокирована ли
skip lock/time, автономка, savepoint, что-то еще
select for update nowait в автономке не сработал?
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771166
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxпроверить заблокирована ли
skip lock/time, автономка, savepoint, что-то еще
select for update nowait в автономке не сработал?
не сработал
....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771168
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousselect for update nowait в автономке не сработал?Автономка с и не покажет, чья блокировка.
Нужно в текущей транзакции выполнить select for update. После этого ни if, ни exception не нужны. Блокировка есть!
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771172
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-andrey_anonymousselect for update nowait в автономке не сработал?Автономка с и не покажет, чья блокировка.
Нужно в текущей транзакции выполнить select for update. После этого ни if, ни exception не нужны. Блокировка есть!
если блокировки не было, то for update наложит

....
stax
...
Рейтинг: 0 / 0
Апдейт поля BLOB
    #39771279
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Автономка с и не покажет, чья блокировка.
Речь-то ведь про имитацию, а не про работу :)
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Апдейт поля BLOB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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