|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
столкнулся с проблемой. похожее обсуждение было тут: https://www.sql.ru/forum/153066/update-blob-in-trigger но так и не понял решения. суть вот в чем: в среде разработки Toad for Oracle, пытаюсь обновить поле с типом BLOB. есть триггер, который потом переливает это поле в другую таблицу. если выполнить апдейт через statement (update my_table set blob_field = ...), то в триггере длина нового блоба ненулевая (dbms_lob.getlength(:new.blob_field) > 0), но если изменяю тело BLOBa через data grid (двойной клик по полю в строке, затем открывается "Blob editor", затем выбираю любой файл непустой и загружаю, то в том же триггере почему-то dbms_lob.getlength = 0, но из таблицы могу скачать блобик и там есть открываемое непустое содержимое) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 14:42 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipav, Lob locator ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 14:55 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
не очень понял. в обоих случаях отрабатывает один и тот же код в триггере, но через statement апдейта призодит ненулевая длина блоба, а через Toad data grid в триггер приходит якобы нулевой блоб. такое ощущение, что при апдейте через data grid создается какой-то другой локатор, который непонятно как и когда присваивается полю таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 15:41 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavтакое ощущение, что при апдейте через data grid создается какой-то другой локатор, который непонятно как и когда присваивается полю таблицыНе надо гнать пурги, когда не понимаешь как работают LOB-ы. Чтобы понять, придётся вдумчиво прочитать документацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2019, 16:00 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Elic, суть объекта LOB известна и понятна, может Вы не поняли суть вопроса? в чем подвох проблемы? повторюсь: в триггере на таблице выполняется код, в частности dbms_output.put_line(dbms_lob.getlength( :new.blob_body )); ситуация 1: апдейт через SQL update my_table set blob_field = (select blob_src from temp_table) where id = 12345; ситуация 2: в data grid среды разработки, в частности TOAD, два раза если кликнуть на поле типа BLOB, то открывается editor, в котором можно выбрать файл из файловой системы ОС и поместить его по факту в область памяти, на которую указывает локатор из выбранного поля строки, запись происходит, могу затем посмотреть (скачать) загруженный файл в обеих ситуациях вызывается один и тот же код триггера, но в первой ситуации выводится значение, большее 0, например 199374, а во второй ситуации выводится значение 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 18:42 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavсуть объекта LOB известна и понятна, может Вы не поняли суть вопроса? в чем подвох проблемы?Считающий себя недопонятым гением и талдычащий одно и то же, скажи, что тебе непонятно в следуующей части документации:RTFMif you use OCI functions or DBMS_LOB routines to change the value of a LOB column or the LOB attribute of an object type column, Oracle does not fire the DML trigger . ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 19:01 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavсуть объекта LOB известна и понятнаЛамерство уныло. Пройдись хотя бы по ссылкам предложенного поиска. Твоя же ссылка содержит код, достаточный для анализа. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2019, 19:01 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Elic, -2-, спасибо, стало яснее. но скажу, что на форумах то наверное и пишут для того, чтобы понять проблему и обращаются к знающим людям. и можно было сразу ответить нормально, без лишнего выпендрёжа!! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 09:06 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavи можно было сразу ответить нормально, без лишнего выпендрёжа!!Т.е. это следует понимать как "Я - д'Артаньян. По ссылкам не хожу. А вы - …" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 09:20 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Elic, " что тебе непонятно в следуующей части документации: RTFM if you use OCI functions or DBMS_LOB routines to change the value of a LOB column or the LOB attribute of an object type column, Oracle does not fire the DML trigger " ключевые слова "does not fire the DML trigger" - которые означают, что подобные действия не инициируют событие, на которое происходит запуск триггера. действительно, если попробовать записать данные через dbms_lob, то триггер даже не будет выполняться. в моих же описанных выше ситуациях я написал, что триггер выполняется (!) = отрабатывает код триггера, чтобы понять это, я добавил простой output, чтобы понять, что триггер в принципе запускался. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 09:23 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavв моих же описанных выше ситуациях я написал, что триггер выполняется (!) = отрабатывает код триггера, чтобы понять это, я добавил простой output, чтобы понять, что триггер в принципе запускался.О чудо! Триггер срабатывает. Но стало ли тебе легче? Пора бы уже понять, что содержимое lob-а триггером ловить ненадёжно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 09:31 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Elic, это понятно, что ненадежно! но как объясняется поведение данных в моих двух примерах - я это хочу понять? я же говорю, что триггер выполняется в обоих моих примерах, а вы кидаете ссылки, в которых описываются ситуации, не активирующие триггер. ну или давайте киньте еще какую-нибудь ссылку, сделайте тем самым вид, что: - всё знаете (но не отвечаете нормально при этом), плюс выставив меня незнающим (причем я не отрицаю, что чего-то недопонимаю) или - не знаете решения или причины проблемы и не хотите об этом сказать (признаться) ? ну и разойдемся тогда, чтобы не тратить время... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 09:38 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavпонятноОпять?! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 09:59 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Elicchavchipavв моих же описанных выше ситуациях я написал, что триггер выполняется (!) = отрабатывает код триггера, чтобы понять это, я добавил простой output, чтобы понять, что триггер в принципе запускался.О чудо! Триггер срабатывает. Но стало ли тебе легче? Пора бы уже понять, что содержимое lob-а триггером ловить ненадёжно. триггер срабатывает, значит ето не OCI functions or DBMS_LOB где в доке написано, что если триггер fire (а он fire) то ловить ненадежно? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 09:59 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxтриггер срабатывает, значит ето не OCI functions or DBMS_LOBЕще один логик. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 10:00 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipav- всё знаете (но не отвечаете нормально при этом), плюс выставив меня незнающим (причем я не отрицаю, что чего-то недопонимаю) - не знаете решения или причины проблемы и не хотите об этом сказать (признаться) ?Третье - ты д'артаньян, не способный пройтись по ссылкам и воспринять информацию. Послнедний намёк: returning. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 10:02 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxтриггер срабатывает, значит ето не OCI functions or DBMS_LOBСтанислав, включи мозг. DML триггера ловят DML события. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 10:06 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Elic, как это понимать?? ElicТретье - ты д'артаньян что опять?? -2-Опять?! так вы ссылки кидаете и намёками бросаетесь, а слабо написать нормально?) или вы сами значит не знаете и делаете какие-то догадки, чтобы не спалиться? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 10:18 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
ElicStaxтриггер срабатывает, значит ето не OCI functions or DBMS_LOBСтанислав, включи мозг. DML триггера ловят DML события. если не срабатывает, то я ето допустим понимаю (OCI or DBMS_LOB) но триггер то сработал что словил триггер (какое DML событие) кагда dbms_lob.getlength(:new.blob_field)=0? імхо, если он fire , то должен отрабатывать как с update и dbms_lob.getlength>0 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 10:51 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavили вы сами значит не знаете и делаете какие-то догадки, чтобы не спалиться? знають! но предлагают не рыбу, а удочку в пустыне ораклячей доки .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 10:55 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
перед тем как писать здесь, я прочитал документацию, но там не нашел описание поведения как в частности описал я. поэтому они и кидают доки, потому что сами их не прочитали видимо и ссылаются на них, думая, что там есть... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 11:04 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavпоэтому они и кидают доки, потому что сами их не прочитали видимо и ссылаются на них, думая, что там есть...Самовлюблённый ламер, returning в приведённых ссылках искать не стал? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 11:38 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxімхо, если он fire , то должен отрабатывать как с update и dbms_lob.getlength>0Ты безнадёжен. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 11:39 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Elic, самовлюбленный и безнадежный по-моему здесь ты, если можешь только оскорблять и нормально на вопросы не отвечать ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 11:47 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
chavchipavперед тем как писать здесь, я прочитал документацию, но там не нашел описание поведения как в частности описал я. Плохо искал. Стандартный паттерн для старых приложений: вставка EMPTY_LOB, а потом его изменение через OCI. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 13:38 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
ElicStaxімхо, если он fire , то должен отрабатывать как с update и dbms_lob.getlength>0Ты безнадёжен. есть такое раз о блобах зашло не могу понять как DBMS_LOB узнает что строка заблокирована? мне ето уже не надо, чисто из любопытства ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 14:02 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, понятно, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 14:04 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
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.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 17:13 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxне могу понять как DBMS_LOB узнает что строка заблокирована? мне ето уже не надо, чисто из любопытства Локатор по опредeлению да и переводе есть местонахождение. Ты ведь не удивляешься что навигатор в твоем телефоне или машине знает ктo ты и где ты есть. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 17:20 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
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.
SY. SY я ето знаю/знал вопрос как он (DBMS_LOB) определяет что value is not locked? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 18:49 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxкак он (DBMS_LOB) определяет что value is not locked?У тебя сложности c переводом locator на украинский или нужны технические детали, где именно хранится lock строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.02.2019, 19:19 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
-2-Staxкак он (DBMS_LOB) определяет что value is not locked?У тебя сложности c переводом locator на украинский или нужны технические детали, где именно хранится lock строки? и то, и то я переводил locator как указатель гугль по другому Код: plaintext 1. 2. 3.
мне больше интересно как (с помощью чего) dbms_lob узнает что запись заблокирована (захвачена) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 09:29 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxинтересно как (с помощью чего) dbms_lob узнает что запись заблокирована Мнэээ... ему SqlEngine скажет, если оно не так. Как и OCI-клиенту. SY же показал. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 11:34 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
andrey_anonymousStaxинтересно как (с помощью чего) dbms_lob узнает что запись заблокирована Мнэээ... ему SqlEngine скажет, если оно не так. Как и OCI-клиенту. SY же показал. если чесно, то я не понял что показал SY чтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна, поетому и интересно каким механизмом dbms_lob проверяет наличие блокировки .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 11:43 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxчтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна, Если только читать - не обязательна. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 12:00 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
andrey_anonymousStaxчтоб получить "локатор" блоба кляуза FOR UPDATE не обязательна, Если только читать - не обязательна. и писать (dbms_lob.write) тоже, главное чтоб запись было залочена вот етот момент мне и интересен, как dbms_lob.write проверяет ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 12:32 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxкак dbms_lob.write проверяет Берет и пишет. А SQL engine его посылает, как показывал SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 12:46 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
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.
.... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 13:30 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Stax--откуда знает что уже заблакировали? Проверили блокировку на записи, на которую указывает локатор. Оттуда и знает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 13:43 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovStax--откуда знает что уже заблакировали? Проверили блокировку на записи, на которую указывает локатор. Оттуда и знает. етого я и не знаю (туплю, на ручнике) как проверяет? какими средствами? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 13:53 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxкакими средствами?dbms_lob по локатору определяет роуид строки, по роуид номера файла и блока, где лежит строка. Делает дамп блока в трейс, регекспами вытаскивает из трейса заголовок строки, оттуда берет номер позиции в itl, из itl выкусывает флаг lock=1. Или тебе прислать машинные коды oracle.exe на 400 мб? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 14:07 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
-2-, спасибо теперь понятно, ето внутренний (закрытый) механизм оракля на sql, pl/sql етого не добится я пытался с имитировать средствами языка sql .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 14:32 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxимитировать средствами языка sql Ммм? Имитировать - так имитировать. Блокировать строку, можно даже dbms_lock для большей имитационности :). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 14:36 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
andrey_anonymous, не блокировать, а проверить заблокирована ли skip lock/time, автономка, savepoint, что-то еще теперь я верю, что используется внутренний механизм просто надеялся что проверяется с помощью "sql" еще раз спасибо, мое любопытство удовлетворено ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 14:55 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxпроверить заблокирована ли skip lock/time, автономка, savepoint, что-то еще select for update nowait в автономке не сработал? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:23 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
andrey_anonymousStaxпроверить заблокирована ли skip lock/time, автономка, savepoint, что-то еще select for update nowait в автономке не сработал? не сработал .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:26 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
andrey_anonymousselect for update nowait в автономке не сработал?Автономка с и не покажет, чья блокировка. Нужно в текущей транзакции выполнить select for update. После этого ни if, ни exception не нужны. Блокировка есть! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:29 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
-2-andrey_anonymousselect for update nowait в автономке не сработал?Автономка с и не покажет, чья блокировка. Нужно в текущей транзакции выполнить select for update. После этого ни if, ни exception не нужны. Блокировка есть! если блокировки не было, то for update наложит .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 15:32 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
-2-Автономка с и не покажет, чья блокировка. Речь-то ведь про имитацию, а не про работу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 17:06 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Staxтеперь я верю, что используется внутренний механизм просто надеялся что проверяется с помощью "sql" Любой lock/проверка на lock должна быть произведена как можно быстро, так-что "проверяется с помощью sql" просто не вписывается. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 17:31 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Извините, что вмешиваюсь Насколько помню, LOB locator не хранит ROWID строки, к которой прицеплен Соответственно, увидеть блокировку строки при доступе через локатор достаточно затруднительно В общем, пока тяпнитсо, пытаюсь что нибудь сообразить ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 17:49 |
|
Апдейт поля BLOB
|
|||
---|---|---|---|
#18+
Вячеслав, думаю через: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2019, 18:26 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1882808]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
3ms |
others: | 326ms |
total: | 504ms |
0 / 0 |