powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом.
25 сообщений из 52, страница 2 из 3
Курсор. Помогите с запросом.
    #39829740
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic,

Коммит я специально не делал...
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39829875
UPDATE (select B.KODRA , A.KDR_FIRST_ID
from BORN B,
ALL_AZ_AGS A
WHERE A.AZ_AGS_ID = B.AZ_AGS_ID
AND A.KDR_FIRST_ID IS NOT NULL)
set KODRA = KDR_FIRST_ID
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830023
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticЕсли у ТС таблицы достаточно большие, то запуск такого апдейта может очень качественно подвесить ему базу ))
LMag, кстати, а почему в коде коммита нет?

Какую базу? Все что он сделает это row level lock да еще и на возможно меньшее число строк чем SELECT FOR UPDATE в оригинале и на меньшее время (в большинстве случаев SQL быстрее чем соответствующий PL/SQL script). А вопрос про коммит вообще показывает что ты не понимаешь как работает SELECT FOR UPDATE.

SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830042
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, чёт фигню какую-то написал. Всё в кучу собрал ))
Попробуй сделать апдейт одним запросом на таблице гигов так тысячи на 2, с обновлением строк миллионов в 10 в высоконагруженной системе. Думаю, DBA кильнёт твою сессию гораздо раньше, чем ты думаешь ))
К чему тут for update - совсем не понял.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830048
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic гигов так тысячи на 2Обычное дело, апдейт таблиц в пару терабайт всегда поручают тем, кто не знает sql.
SynopticК чему тут for update - совсем не понял.Что имел ввиду СЯ, очевидно. К месту или невпопад, но "совсем не понять" нельзя.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830069
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticSY, чёт фигню какую-то написал. Всё в кучу собрал ))
Попробуй сделать апдейт одним запросом на таблице гигов так тысячи на 2, с обновлением строк миллионов в 10 в высоконагруженной системе. Думаю, DBA кильнёт твою сессию гораздо раньше, чем ты думаешь ))
К чему тут for update - совсем не понял.

Боюсь ты так ничего и не понял.
1. При всех равных условиях (10 строк или 10 миллионов строк) PL/SQL script отработает (в большинстве случаев) медленнее чем одним SQL.
2. Как только ты всунешь commit так сразу ты потеряешь транзакционность (имеет ли это значение в данном конкретном случае это другой вопрос).
3. Как только ты всунешь commit так сразу получишь:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
SQL> DECLARE 
  2    CURSOR v_cur IS 
  3       SELECT * FROM emp for update;
  4  BEGIN 
  5    for rec IN v_cur LOOP
  6        COMMIT;
  7    END LOOP;
  8  END;
  9  /
DECLARE
*
ERROR at line 1:
ORA-01002: fetch out of sequence
ORA-06512: at line 5
ORA-06512: at line 5


SQL> 



4. Eсли уберешь for update то рискуешь потерять данные (ты select, кто-то update+commit, ты update поверх).

SY.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830116
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, извини, но ты пишешь очевидные вещи.
Никто не спорит с тем, что SQL быстрее PL/SQL.
Никто не говорит, что про то, что можно будет продолжить фечить курсор после коммита.
Речь вообще о другом.
Заранее извиняюсь за банальщину, но я говорил только про то, что применяя апдейты без ограничения по объёму блокировок и без оглядки на последствия, можно встрять на лёгкий паралич БД. И это будет и в случае чистого SQL и в случае PL/SQL. Сколько данных у ТС в таблице, сколько он обновляет и на сколько критичны блокировки мы не знаем. Но в высоконагруженных системах выборки лучше проводить с rownum<X, и выполнять коммиты для каждых Y строк.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830118
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synopticты пишешь очевидные вещи
...
Заранее извиняюсь за банальщину...Для понимания, почему об одном "никто не говорит", а другое ты повторяешь который раз, озвучь, как ты отличаешь банальщину от очевидных вещей.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830126
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-, если ты переформулируешь свой вопрос в вид, доступный для понимания, я постараюсь на него ответить.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830349
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticНикто не спорит с тем, что SQL быстрее PL/SQL.
Это, скажем так, не совсем правда, причем в обеих частях утверждения, т.е. как найдутся люди, которые данный тезис оспорят, так и найдутся ситуации, в которых pl/sql справится быстрее/лучше.
Что касается "update повесит базу" - то это очень дурной термин, близко не отражающий сути происходящего.
Да и не каждый админ будет рубить блокирующую сессию, не разобравшись тщательно с прогнозируемым временем отката уже произведенных сессий изменений.
По крайней мере, бывалый dba - не будет, сберовские подтвердят ;)
Ибо встрять можно намного жестче в сравнении с невмешательством.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830419
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousSynopticНикто не спорит с тем, что SQL быстрее PL/SQL.
Это, скажем так, не совсем правда, причем в обеих частях утверждения, т.е. как найдутся люди, которые данный тезис оспорят, так и найдутся ситуации, в которых pl/sql справится быстрее/лучше.
Речь шла про конкретные скрипты SQL и PL/SQL

[quote andrey_anonymous]SynopticЧто касается "update повесит базу" - то это очень дурной термин, близко не отражающий сути происходящего.
Да и не каждый админ будет рубить блокирующую сессию, не разобравшись тщательно с прогнозируемым временем отката уже произведенных сессий изменений.
По крайней мере, бывалый dba - не будет, сберовские подтвердят ;)
Ибо встрять можно намного жестче в сравнении с невмешательством.Понятно что есть особенности. Например у нас, если DBA видит что кто-то отъел 500 Гб SGA, и это не "разрешённые" - продуктовые логины, то в адрес инициатора сессии, а также к его руководителю летит вопрос, всё ли у него хорошо ))
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830423
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic кто-то отъел 500 Гб SGAВ buffer cache?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830463
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Synopticвыборки лучше проводить с rownum<Xлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.

Synopticи выполнять коммиты для каждых Y строкпрощайте транзакционность, консистентность и возможность нормального роллбэка...

SynopticЗаранее извиняюсь за банальщинуэто не "банальщина", а искаженный и перевранный набор недомолвок и мифов.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830534
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.
В индекс нельзя передать параметр, в то время как в rownum - без проблем. Или как-то можно?

xtenderпрощайте транзакционность, консистентность и возможность нормального роллбэка....Какие роллбэки на проде? И что не так с транзакционностью, консистентностью?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830536
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticКакие роллбэки на проде? И что не так с транзакционностью, консистентностью?
надеюсь Вы притворяетесь? commit ставится там, где надо по логике. если ставить его раньше, то вся логика полетит в случае сбоя, ведь сохранится лишь часть логической транзакции.
классический пример перевод денег между банковскими счетами, если поставить промежуточный комит, после которого произойдет сбой, то деньги снимутся с одного счета, а на другом не появятся
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830552
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex-lsнадеюсь Вы притворяетесь? commit ставится там, где надо по логике. А где было заявлено иное?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830556
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synopticalex-lsнадеюсь Вы притворяетесь? commit ставится там, где надо по логике. А где было заявлено иное?Ты балабол?
Synopticкстати, а почему в коде коммита нет?Логика тебя не колышет.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830565
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderSynopticвыборки лучше проводить с rownum<Xлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.



о каком first_rows() идет речь ? режиме оптимизатора?

....
stax
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830576
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSynopticпропущено...
А где было заявлено иное?Ты балабол?
Synopticкстати, а почему в коде коммита нет?Логика тебя не колышет.
заканчивай уже придумывать и начни думать. А если не понимаешь, спроси.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SET SERVEROUTPUT ON;
DECLARE 
  CURSOR bornRec IS 
     SELECT * FROM BORN
        WHERE DATREG between TO_DATE('23.08.1936','DD/MM/YYYY') AND TO_DATE('29.03.1955', 'DD/MM/YYYY') for update;
  KDR_FIRST_ID INTEGER;
  COUNT_REC NUMBER;
BEGIN 
  for rec IN bornRec LOOP
      SELECT count(*) INTO COUNT_REC FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;
      IF COUNT_REC > 0 THEN
         SELECT KODRA_FIRST INTO KDR_FIRST_ID FROM ALL_AZ_AGS WHERE AZ_AGS_ID = rec.AZ_AGS_ID;
         dbms_output.put_line(rec.AZ_AGS_ID || ', ' ||  KDR_FIRST_ID);
        IF KDR_FIRST_ID IS NOT NULL THEN
          UPDATE BORN SET KODRA = KDR_FIRST_ID where current of bornRec;
        END IF;
      END IF;    
  END LOOP;
   commit;
  DBMS_OUTPUT.PUT_LINE('Progress END....');
END;



Какую транзакционность, консистентность нарушает коммит в данном месте?

Кстати, как выделить часть кода на форуме?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830580
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticКакую транзакционность, консистентность нарушает коммит в данном месте?Для утверждений про констистентность фрагмента кода не достаточно, нужно знать бизнес-правила. Одно определенно можно сказать про этот код - в нем не определено значение Y:Synopticвыполнять коммиты для каждых Y строк.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830583
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Для утверждений про констистентность фрагмента кода не достаточно, нужно знать бизнес-правила. Согласен.

-2-Одно определенно можно сказать про этот код - в нем не определено значение YЭто код ТС. Да и понятно, что нужно переписывать код, чтобы "выполнять коммиты для каждых Y строк"
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830793
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticДа и понятно, что нужно переписывать код, чтобы "выполнять коммиты для каждых Y строк"
не надо переписывать! в этом и смысл, что commit там, где должен быть по логике.
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830923
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex-ls, речь немного о другом
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830926
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Synopticxtenderлучше почитай про first_rows(), это гораздо правильнее и не ломает оптимизатор так, как присутствие rownum.
В индекс нельзя передать параметр, в то время как в rownum - без проблем. Или как-то можно?что за бред... Какой ещё параметр в индекс?
SynopticКакие роллбэки на проде? И что не так с транзакционностью, консистентностью?ох, рановато тебе ещё такие темы обсуждать.. Ты всерьёз считаешь, что роллбэки только для тестовых или девелоперских сред?
...
Рейтинг: 0 / 0
Курсор. Помогите с запросом.
    #39830927
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synopticalex-ls, речь немного о другом
"да как же тебя понять, если ты ничего не говоришь?"
Заметьте, никто не понял, что Вы хотите, Вам стоит посидеть подумать и только потом писать :)
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсор. Помогите с запросом.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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