Comments 13
Про SKIP LOCKED совет не очень, т.к. Oracle не рекомендует использовать его напрямую: «Oracle recommends that you use the Oracle Streams Advanced Queuing APIs instead of directly using the SKIP LOCKED functionality».
Для FORALL полезно было бы рассказать про SQL%BULK_EXCEPTIONS и новый удобный синтаксис FORALL x IN INDICES OF table_type_ (и выглядит симпатичней и очень помогает при разреженных коллекциях)
Для FORALL полезно было бы рассказать про SQL%BULK_EXCEPTIONS и новый удобный синтаксис FORALL x IN INDICES OF table_type_ (и выглядит симпатичней и очень помогает при разреженных коллекциях)
Ну это зависит от конкретной ситуации, да и это уже относится к общему дизайну конкретной системы, и скачок с for update до dbms_aq мне кажется слишком резким особенно в рамках одной заметки. Кайт, например, в случае конкретного вопроса проверки блокировок просто советовал skip locked — тема слишком крупна для рассмотрения в одной заметке.
А про отладку и тестирование в общем-то я планировал отдельную статью написать, только вот не знаю когда в очередной раз поднимутся на это руки :)
А про отладку и тестирование в общем-то я планировал отдельную статью написать, только вот не знаю когда в очередной раз поднимутся на это руки :)
Кстати, ещё на счёт коллекций вспомнил: оракл крайне неохотно отдаёт память, ранее отданную под коллекции:
При интенсивной работе с коллекциями стоит это учитывать.
declare
type t_bi is table of binary_integer index by binary_integer;
v_bi t_bi;
begin
-- перед началом теста занято 2666872 PGA
for i in 1..n loop v_bi(i) := i; end loop;
-- после заполнения коллекции — 31895928
v_bi.delete;
-- после удаления всех записей — 31895928 (внезапно...)
-- подчищаем память
dbms_session.free_unused_user_memory;
-- после очистки — 2666872
end;
При интенсивной работе с коллекциями стоит это учитывать.
Еле вспомнил где читал и специально нашел — прочитайте у Кайта в «Expert One-on-One Oracle» главу «Области PGA и SGA». Цитата у него про dbms_session.free_unused_user_memory: «Учтите, однако, что в большинстве систем это действие — пустая трата времени.»
Спасибо, было интересно прочитать. Особенно про нюансы с TYPE и ROWTYPE.
а где обещанные заголовком нюансы-то?
О, вы специалист по ораклу и все это знали? Тогда может технический комментарий будет, а не троллинг?
На самом деле у меня претензия более по стилю и формулировке, нежели по содержанию: я не вижу формулировок нюансов. Вот в первом подразделе — вижу код, сообщение об ошибке, и описание причины ошибки. А по-хорошему — после кода и соообщения об ошибке так и хочется увидеть резюмирующую фразу типа такой: «Вот смотрите, переменная в PL/SQL-блоке объявлена со ссылкой на фактический тип колонки, а селект в неё из этой колонки не выполняется!» и только после неё писать ваше «Причина ошибки кроется в том, ...»
Чуть раньше — Вы пишите «Как видите, значение прекрасно вставилось.» — но мы-то не видим! Вы не привели результата выполнения ранее показанной команды!
Чуть раньше — Вы пишите «Как видите, значение прекрасно вставилось.» — но мы-то не видим! Вы не привели результата выполнения ранее показанной команды!
Кстати говоря, поймав ошибку через when others then ..., Вы потеряли отображение номера строки, на которой эта ошибка произошла. Лучше б не ловили, а дали её поймать среде выполнения. Вдруг она вообще произошла при выполнении dbms_output.put_line('Все ок, значение=' || l_a);?
Sign up to leave a comment.
Некоторые советы при работе с PLSQL