Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Oracle |
![]() ![]() |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Dimitry Sibiryakov Member Откуда: Сообщений: 52116 |
Плохо искал. Стандартный паттерн для старых приложений: вставка EMPTY_LOB, а потом его изменение через OCI. Posted via ActualForum NNTP Server 1.5 |
||
7 фев 19, 13:38 [21803473] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
есть такое раз о блобах зашло не могу понять как DBMS_LOB узнает что строка заблокирована? мне ето уже не надо, чисто из любопытства ..... stax |
||||
7 фев 19, 14:02 [21803492] Ответить | Цитировать Сообщить модератору |
chavchipav Member Откуда: Сообщений: 11 |
Dimitry Sibiryakov, понятно, спасибо! |
7 фев 19, 14:04 [21803499] Ответить | Цитировать Сообщить модератору |
SY Member Откуда: Middlebury, CT USA Сообщений: 10100 |
А ты попробуй: 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. Сообщение было отредактировано: 7 фев 19, 17:15 |
||
7 фев 19, 17:13 [21803716] Ответить | Цитировать Сообщить модератору |
SY Member Откуда: Middlebury, CT USA Сообщений: 10100 |
Локатор по опредeлению да и переводе есть местонахождение. Ты ведь не удивляешься что навигатор в твоем телефоне или машине знает ктo ты и где ты есть. SY. Сообщение было отредактировано: 7 фев 19, 17:23 |
||
7 фев 19, 17:20 [21803729] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
SY я ето знаю/знал вопрос как он (DBMS_LOB) определяет что value is not locked? .... stax |
||||
7 фев 19, 18:49 [21803793] Ответить | Цитировать Сообщить модератору |
-2- Member Откуда: Сообщений: 15330 |
|
||
7 фев 19, 19:19 [21803814] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
и то, и то я переводил locator как указатель гугль по другому
мне больше интересно как (с помощью чего) dbms_lob узнает что запись заблокирована (захвачена) .... stax |
||||
8 фев 19, 09:29 [21804025] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 18649 |
Мнэээ... ему SqlEngine скажет, если оно не так. Как и OCI-клиенту. SY же показал. |
||
8 фев 19, 11:34 [21804168] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
если чесно, то я не понял что показал SY чтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна, поетому и интересно каким механизмом dbms_lob проверяет наличие блокировки .... stax |
||||
8 фев 19, 11:43 [21804174] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 18649 |
Если только читать - не обязательна. |
||
8 фев 19, 12:00 [21804195] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
и писать (dbms_lob.write) тоже, главное чтоб запись было залочена вот етот момент мне и интересен, как dbms_lob.write проверяет ..... stax |
||||
8 фев 19, 12:32 [21804245] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 18649 |
Берет и пишет. А SQL engine его посылает, как показывал SY. |
||
8 фев 19, 12:46 [21804258] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
andrey_anonymous, табличка с одной строкой (для упрощения) 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 |
8 фев 19, 13:30 [21804305] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52116 |
Проверили блокировку на записи, на которую указывает локатор. Оттуда и знает. Posted via ActualForum NNTP Server 1.5 |
||
8 фев 19, 13:43 [21804327] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
етого я и не знаю (туплю, на ручнике) как проверяет? какими средствами? ..... stax |
||||
8 фев 19, 13:53 [21804339] Ответить | Цитировать Сообщить модератору |
-2- Member Откуда: Сообщений: 15330 |
Или тебе прислать машинные коды oracle.exe на 400 мб? |
||
8 фев 19, 14:07 [21804358] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
-2-, спасибо теперь понятно, ето внутренний (закрытый) механизм оракля на sql, pl/sql етого не добится я пытался с имитировать средствами языка sql .... stax |
8 фев 19, 14:32 [21804392] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 18649 |
Ммм? Имитировать - так имитировать. Блокировать строку, можно даже dbms_lock для большей имитационности :). |
||
8 фев 19, 14:36 [21804396] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
andrey_anonymous, не блокировать, а проверить заблокирована ли skip lock/time, автономка, savepoint, что-то еще теперь я верю, что используется внутренний механизм просто надеялся что проверяется с помощью "sql" еще раз спасибо, мое любопытство удовлетворено ..... stax |
8 фев 19, 14:55 [21804419] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 18649 |
select for update nowait в автономке не сработал? |
||
8 фев 19, 15:23 [21804464] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
не сработал .... stax |
||||
8 фев 19, 15:26 [21804473] Ответить | Цитировать Сообщить модератору |
-2- Member Откуда: Сообщений: 15330 |
Нужно в текущей транзакции выполнить select for update. После этого ни if, ни exception не нужны. Блокировка есть! |
||
8 фев 19, 15:29 [21804483] Ответить | Цитировать Сообщить модератору |
Stax Member Откуда: Ukraine,Lviv Сообщений: 2908 |
если блокировки не было, то for update наложит .... stax |
||||
8 фев 19, 15:32 [21804491] Ответить | Цитировать Сообщить модератору |
andrey_anonymous Member Откуда: Москва Сообщений: 18649 |
Речь-то ведь про имитацию, а не про работу :) |
||
8 фев 19, 17:06 [21804672] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: ←Ctrl назад 1 [2] 3 вперед Ctrl→ все |
Все форумы / Oracle | ![]() |