powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / массовый селект фор апдейт
8 сообщений из 8, страница 1 из 1
массовый селект фор апдейт
    #39845704
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
FOR rec IN (    SELECT *
                      FROM my_TBL
                     WHERE ID IN (SELECT * FROM TABLE (get_list_int ( :p_LIST_ID)))
                FOR UPDATE WAIT 30)
    LOOP
        exit; -----------------
    END LOOP; 

поллеги, давно селект фор апдейт массовый не писал

подскажите, такая конструкция корректна?
или залочит первые 100 строк и дальше нет?
...
Рейтинг: 0 / 0
массовый селект фор апдейт
    #39845812
maglevdevice
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,

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

FOR UPDATE работает в два прохода. Первый (при открытии курсора -явном или неявном) fetch + lock всех строк выбираемых SELECToм, второй проход это собственно fetch клиентом. Тaк-что залочит все записи выбираемыe SELECToм.

SY.
...
Рейтинг: 0 / 0
массовый селект фор апдейт
    #39845834
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
...
Рейтинг: 0 / 0
массовый селект фор апдейт
    #39845851
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYFOR UPDATE работает в два прохода. Первый (при открытии курсора -явном или неявном) fetch + lock всех строк выбираемых SELECToм, второй проход это собственно fetch клиентом.
И давно?
...
Рейтинг: 0 / 0
массовый селект фор апдейт
    #39845855
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousИ давно?

С сотворения мира.

Сессия 1:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> DECLARE
  2      CURSOR V_CUR IS SELECT * FROM EMP WHERE DEPTNO = 10 FOR UPDATE;
  3  BEGIN
  4      OPEN V_CUR;
  5  END;
  6  /

PL/SQL procedure successfully completed.

SQL>



Сессия 2:

Код: plsql
1.
2.
SQL> UPDATE EMP SET SAL = SAL WHERE ENAME = 'CLARK'
  2  / -- висим



Сессия 3:

Код: plsql
1.
2.
SQL> UPDATE EMP SET SAL = SAL WHERE ENAME = 'KING'
  2  / -- висим



Сессия 4:

Код: plsql
1.
2.
SQL> UPDATE EMP SET SAL = SAL WHERE ENAME = 'MILLER'
  2  / -- висим



SY.
...
Рейтинг: 0 / 0
массовый селект фор апдейт
    #39845865
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYС сотворения мира.
Мне skip locked почудился, сорри.
...
Рейтинг: 0 / 0
массовый селект фор апдейт
    #39845871
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousSYС сотворения мира.
Мне skip locked почудился, сорри.

Собственно, для полноты картины (вдруг кто не в курсе):
Код: 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.
create table dropme_t as select rownum N, 'Value for row '||rownum||rpad(' ',500,' ') V from dual connect by level < 10;
Table created

declare
  cursor c is select * from dropme_t for update SKIP LOCKED;
  function check_lock_n(i_n number) return varchar2 is
    pragma autonomous_transaction;
    ResourceBusy exception; pragma exception_init(ResourceBusy, -54);
    result varchar2(100);
  begin
    select N ||' is Not locked' into result from dropme_t where n = i_n for update nowait;
    rollback;
    return result;
  exception
    when ResourceBusy then return i_n || ' is Locked';
  end;
begin
  for i in c loop
   dbms_output.put_line('Fetched: '||i.n||', '||check_lock_n(9));
  end loop;
  rollback;
end;
/

Fetched: 1, 9 is Not locked
Fetched: 2, 9 is Not locked
Fetched: 3, 9 is Not locked
Fetched: 4, 9 is Not locked
Fetched: 5, 9 is Not locked
Fetched: 6, 9 is Not locked
Fetched: 7, 9 is Not locked
Fetched: 8, 9 is Not locked
Fetched: 9, 9 is Locked

PL/SQL procedure successfully completed

SQL> 
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / массовый селект фор апдейт
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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