powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Чтение таблицы из триггера (after-insert)
25 сообщений из 178, страница 5 из 8
Чтение таблицы из триггера (after-insert)
    #40010419
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
К слову о неожиданных граблях - вот мои сегодняшние.



недоговариваете (махлюете)
currval нельзя получить где-то не дернув nextval

....
stax
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010420
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123йй
НеофитSQLАдын страка - адын камит.

а это не твой "опытный коллега" в соседней теме решает то, что ты сочинил ?

комит комиту рознь.
Ставлю на то, что в обоих случаях удаленный клиент комитит.

При частоте 0.2 тех проблем не получишь,
но удивление может прибежать, когда кто-нибудь с большими потоками скажет - о яка гарна система, дайте нам такую...
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010513
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Про сиквенс .currval/nextval подсказать

Не осилили сходу прочитать про cache и order? Бывает. Тут таких тем от студентов - пачками.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010518
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но почему-то не озвучивает
Постеснялся что-ли? Вроде не замечено за ним особой стеснительности -- вываливает свои домыслы совершенно свободно
И я почему-то уверен, что в подсказке он выдаст частный случай (alter sequence), хотя в доке описан более общий
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010524
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

у него примерно с частотой 0.2ГЦ палятся номера

.....
stax
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010527
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
НеофитSQL
К слову о неожиданных граблях - вот мои сегодняшние.



недоговариваете (махлюете)
currval нельзя получить где-то не дернув nextval

....
stax


Как это получилось:

В "главной" сессии дернул nextval. получил 31. Сессия осталась живой.

Вторая сессия потянула свой nextval 4 раза: 32,33,34,35, и закрылась.

Дальше - как на экране. Currval дает последнее число, но для сессии.
По незнанию, я ожидал что получу текущее значение сиквенса, его не меняя.
Похоже, такой операции просто нет. Чтобы прочитать глобальный сиквенс, его надо изменить.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010542
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
как в единственной активной сессии

НеофитSQL
Вторая сессия потянула

Да вы, батенька, тот ещё шулер.


упд. Про то, что ваши конструкции развалятся в многопользовательком режиме, вам говорят чуть ли не с первого топика.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010543
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
НеофитSQL
Про сиквенс .currval/nextval подсказать, или ещё подумаете, как в единственной активной сессии разрыв появился?
Нука-нука (кстати, это поведение в документации описано)


Да, это были мои грабли - я подумал что currval позволяет прочитать значение глобального сиквенса. Оказалось - фигвам.
Если хочешь узнать значение - изволь его заодно увеличить. Как прочитать без инкремента - наверное только через dbms функции.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010547
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
как в единственной активной сессии

НеофитSQL
Вторая сессия потянула

Да вы, батенька, тот ещё шулер.


Следите за руками лучше :) Текст фактически корректен.

Все, что было показано на экране - произошло в одной одинокой сессии.
Между вызовами currval и nextval других сессий не было.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010549
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
я подумал

А надо было документацию прочитать, а не додумывать.
One user can never acquire the sequence number generated by another user . After a sequence value is generated by one user, that user can continue to access that value regardless of whether the sequence is incremented by another user.

Sequence numbers are generated independently of tables, so the same sequence can be used for one or for multiple tables. It is possible that individual sequence numbers will appear to be skipped, because they were generated and used in a transaction that ultimately rolled back. Additionally, a single user may not realize that other users are drawing from the same sequence.

...

Any reference to CURRVAL always returns the current value of the sequence, which is the value returned by the last reference to NEXTVAL.

Before you use CURRVAL for a sequence in your session , you must first initialize the sequence with NEXTVAL
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010552
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Между вызовами currval и nextval других сессий не было

Т.е. вы так и не осилили концепцию многопользовательской работы? Именно, что была.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010553
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Stax
пропущено...


недоговариваете (махлюете)
currval нельзя получить где-то не дернув nextval

....
stax


Как это получилось:

В "главной" сессии дернул nextval. получил 31. Сессия осталась живой.

Вторая сессия потянула свой nextval 4 раза: 32,33,34,35, и закрылась.

Дальше - как на экране. Currval дает последнее число, но для сессии.
По незнанию, я ожидал что получу текущее значение сиквенса, его не меняя.
Похоже, такой операции просто нет. Чтобы прочитать глобальный сиквенс, его надо изменить.


Не верю что во Второй сессии
авторCurrval дает последнее число, но для сессии

не дернув nextval Currval не штатно не получить

Код: plsql
1.
2.
3.
4.
5.
SQL> select s.currval from dual;
select s.currval from dual
       *
ERROR at line 1:
ORA-08002: sequence S.CURRVAL is not yet defined in this session



ps
c cash дырки будут
.....
stax
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010554
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Между вызовами currval и nextval других сессий не было.

А теперь продемонстрируйте, что в вашем понимании "была другая сессия между ... ".
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010557
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

Все, что было показано на экране - произошло в одной одинокой сессии.
Между вызовами currval и nextval других сессий не было .


автор Вторая сессия потянула свой nextval 4 раза: 32,33,34,35, и закрылась.


кто-то запутался в двух соснах

.....
stax
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010562
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров
Но почему-то не озвучивает
Постеснялся что-ли? Вроде не замечено за ним особой стеснительности -- вываливает свои домыслы совершенно свободно
И я почему-то уверен, что в подсказке он выдаст частный случай (alter sequence), хотя в доке описан более общий


alter sequence - это как подкрутка одометра? Это была бы не загадка, а издевательство.

Тут все было чесноком.
Человек садится у компьютера, в открытой сессии с неизвестной ему историей.
Проверяет, что других сессий нет, он с ораклом наедине.

спрашивает currval - получает 31 (т.е. сессия уже работала с сиквенсом)
спрашивает nextval - получает 36.

Мне это показалось необычным, т.к. о кэше сиквенса в доках говорится в основном в контексте скорости.

Про currval Оракл пишет максимально просто: (я подправил, согласно моему пониманию)
CURRVAL: Returns the current value of a sequence (returns the last value returned from nextval in the same session)

NEXTVAL: Increments the sequence and returns the next value
...
Any reference to CURRVAL always returns the current value of the sequence, which is the value returned by the last reference to NEXTVAL
(in the same session)


Отсюда: https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns002.htm

Такое поведение currval для новичка неинтуитивное, но полезное: можно пользоваться currval вместо запоминания числа в переменной, оно не изменится в контексте сессии. Пример в конце страницы по ссылке выше это демонстрирует.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010563
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
НеофитSQL

Все, что было показано на экране - произошло в одной одинокой сессии.
Между вызовами currval и nextval других сессий не было .


автор Вторая сессия потянула свой nextval 4 раза: 32,33,34,35, и закрылась.


кто-то запутался в двух соснах

.....
stax

Похоже. Вот карта:

вторая сессия отработала до того , что показано на экране.

Все, что было показано на экране - произошло в одной одинокой сессии.
Между вызовами currval и nextval других сессий не было
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010568
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Такое поведение currval для новичка неинтуитивное

С чего бы? Текущее значение, полученное последним этим самым новичком. Очень даже интуитивно.

Но вы продолжайте бессистемно тыкаться носом в частности, не читая концепций. Чудес будет много.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010570
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
Между вызовами currval и nextval других сессий не было

Т.е. вы так и не осилили концепцию многопользовательской работы? Именно, что была.


А, вижу что вы так и не поняли пока. Похоже, что не сталкивались.

посмотрите другие ответы, должно проясниться.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010571
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
вторая сессия отработала до того , что показано на экране.

Включая первый вызов nextval?

Заговариваетесь.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010572
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
А, вижу что вы так и не поняли пока

Нет. Это вы упорно живёте в императивном однопоточном мире.

У вас получился классический пример "чудес" многопользовательского режима. Именно из-за непонимания, что вторая сессия была и работала с тем же объектом.

упд. нарисуйте себе на бумажке таймлайны сессий, может так дойдёт
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010573
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
Такое поведение currval для новичка неинтуитивное

С чего бы? Текущее значение, полученное последним этим самым новичком. Очень даже интуитивно.

Но вы продолжайте бессистемно тыкаться носом в частности, не читая концепций. Чудес будет много.


О, вы теперь поняли о чем речь. currval возвращает последнее значение nextval для этой сессии .

Вы конечно об этом давно знали, из документации :) Подскажите, где Оракл это описывает? Никак не найду.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010576
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Подскажите, где Оракл это описывает?


Парой сообщений выше цитата.

И на моей памяти вы единственный человек, для которого это оказалось неинтуитивным. За все годы работы с бд в целом и ораклом в частности.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010577
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
env
пропущено...

Т.е. вы так и не осилили концепцию многопользовательской работы? Именно, что была.


А, вижу что вы так и не поняли пока. Похоже, что не сталкивались.

посмотрите другие ответы, должно проясниться.
Я просто не думал, что совершенно стандартное, описаное и понятное интуитивно поведение currval и nextval вызовет какие-то непонятки
Но, как обычно, аффтар не читатель
Думал там действительно что-то из https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-views-sequences-and-synonyms.html#GUID-5ABC0615-BE0C-48CE-BD18-C86AAF7DF953 The database might skip sequence numbers if you choose to cache a set of sequence numbers. For example, when an instance abnormally shuts down (for example, when an instance failure occurs or a SHUTDOWN ABORT statement is issued), sequence numbers that have been cached but not used are lost. Also, sequence numbers that have been used but not saved are lost as well. The database might also skip cached sequence numbers after an export and importхотя здесь тоже не отражен случай, что определение просто выгрузилось из Library Cache
Насколько помню, в более ранних версиях про это было написано

PS. Но ты продолжай -- и мы поразвлекаемся и ты таки что-то новое узнаешь
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010579
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
вторая сессия отработала до того , что показано на экране.

Включая первый вызов nextval?

Заговариваетесь.


Вы наверное спорите о правилах шахмат после каждого проигрыша. Держите марку.

Вот что я представил:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> select SQ_TEST.currval from dual;
   CURRVAL
----------
        31

SQL> select SQ_TEST.nextval from dual;
   NEXTVAL
----------
        36

SQL> select dbms_metadata.get_ddl('SEQUENCE', 'SQ_TEST') from dual;
DBMS_METADATA.GET_DDL('SEQUENC
--------------------------------------------------------------------------------
   CREATE SEQUENCE  "NEOPHYTE"."SQ_TEST"  MINVALUE 1 MAXVALUE 9999999999

 



Я не показал первый nextval (Stax и другие быстро смекнули что он конечно же был),
я только сказал что между currval и nextval (на экране) никаких других сессий не происходило. Это правда.

Это была задачка подумать про контекст, и как такой разрыв мог произойти.
Вячеслав (явно опытный товарищ) выдвинул одну гипотезу, которая вполне могла объяснить наблюдаемый разрыв.
Других предложений я не видел, надеюсь что не пропустил.

Если хотите, я вам лично еще загадок накидаю, полегче.
...
Рейтинг: 0 / 0
Чтение таблицы из триггера (after-insert)
    #40010580
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это единственный человек для которого так много оказалось интиетивно неправильно понятным, что читать документацию совсем не обязательно

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


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