|
|
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
к крайнему своему стыду только сегодня узнал, что в запросе вида Код: plsql 1. 2. 3. при Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. возможна ситуация, когда myfunc ругнется no_data_found - при удалении в другой сессии записи из tbl с id = 1 в момент запроса (но до того, как отработала myfunc) после этого открытия мне резко поплохело и я теперь вообще ничего не понимаю. поясните, пожалуйста, возможна ли ситуация, когда две идентичные функции myfunc и myfunc2 в запросе Код: plsql 1. 2. 3. вернут разные результаты (делет прошел после отработки myfunc но до отработки myfunc2)? есть ли разница, откуда пришел запрос - из клиента непосредственно или описан в некой хранимой процедуре? разве данная особенность не имеет отношения к понятию "нарушение целостности данных"? и в конце концов - это специально сделано и правильно, или просто техническая особенность? баг или фича? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:07:18 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggи в конце концов - это специально сделано и правильно, Сдается мне Вы уже дозрели до уровней изоляции транзакций и подобной сложной ерунды (READ COMMITED, SERIALIZABLE, READ ONLY TRANSACTION). Почитайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:17:52 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
При обычном (Read commited) уровне изоляции вполне возможно. Вызванные из SQL-оператора PL/SQL функции работают со своим snapshot SCN, отличающимся от SCN родительского запроса Собственно, кроме тормозов (переключение контекста, в частности) это является еще одним критерием нежелательности вызова PL/SQL кода из SQL оператора. Некоторые, кстати, это используют. На операторы (CREATE OPERATOR), кстати, это не распространяется. Ну и уровень изоляции READ ONLY/SERIALIZABLE тоже помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:20:45 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевleggи в конце концов - это специально сделано и правильно, Сдается мне Вы уже дозрели до уровней изоляции транзакций и подобной сложной ерунды (READ COMMITED, SERIALIZABLE, READ ONLY TRANSACTION). Почитайте. как ни странно читал) . м.б. не в коня корм, дурака учить тока портить. просто всегда считал, что select и есть транзакция чтения, все что он дергает - (ф-ции) работают в рамках этой транзакции. оказывается ни разу. так выходит две идентичные ф-ции в одном запросе могут вернуть разные результаты так что ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:21:40 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggтехническая особенность?plsql это фактически клиент БД. Соответственно, нет связи с моментом начала родительского запроса, а каждый внутри-запрос выполняется в соответствии с типом транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:22:12 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggесть ли разница, откуда пришел запрос - из клиента непосредственно или описан в некой хранимой процедуре? разве данная особенность не имеет отношения к понятию "нарушение целостности данных"? и в конце концов - это специально сделано и правильно, или просто техническая особенность? баг или фича?RTFM Read Consistency in the Read Committed Isolation Level (FAQ) : Database ConceptsIf a SELECT list contains a PL/SQL function, then the database applies statement-level read consistency at the statement level for SQL run within the PL/SQL function code, rather than at the parent SQL level.STFF operator vs function ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:22:27 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровПри обычном (Read commited) уровне изоляции вполне возможно. Вызванные из SQL-оператора PL/SQL функции работают со своим snapshot SCN, отличающимся от SCN родительского запроса Собственно, кроме тормозов (переключение контекста, в частности) это является еще одним критерием нежелательности вызова PL/SQL кода из SQL оператора. Некоторые, кстати, это используют. На операторы (CREATE OPERATOR), кстати, это не распространяется. Ну и уровень изоляции READ ONLY/SERIALIZABLE тоже помогает. при сериализэйбл - это мне понятно. удивлен, что он тут необходим, оказывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:31:12 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
Elicleggесть ли разница, откуда пришел запрос - из клиента непосредственно или описан в некой хранимой процедуре? разве данная особенность не имеет отношения к понятию "нарушение целостности данных"? и в конце концов - это специально сделано и правильно, или просто техническая особенность? баг или фича?RTFM Read Consistency in the Read Committed Isolation Level (FAQ) : Database ConceptsIf a SELECT list contains a PL/SQL function, then the database applies statement-level read consistency at the statement level for SQL run within the PL/SQL function code, rather than at the parent SQL level.STFF operator vs function огромное спасибо. то что надо. не понимаю как эта информация раньше мимо меня прошла.. так все-таки получается, что по разному ф-ции отработать могут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:33:15 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровСобственно, кроме тормозов (переключение контекста, в частности) это является еще одним критерием нежелательности вызова PL/SQL кода из SQL оператора. как все запущено..вообще ничего не знал о подобной нежелательности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:38:47 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggпросто всегда считал, что select и есть транзакция чтения В этом и заблуждение. select -это операция. Транзакция это множество операций. И да если явно не указано, то Oracle не старается привести все операции одной транзакции к одному моменту времени. Был бы у Вас Постгрес - там бы вопроса и не стояло, там даже одну операцию не стараюся привести к одному моменту времени. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 15:52:13 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньевleggпросто всегда считал, что select и есть транзакция чтения В этом и заблуждение. select -это операция. Транзакция это множество операций. И да если явно не указано, то Oracle не старается привести все операции одной транзакции к одному моменту времени. Был бы у Вас Постгрес - там бы вопроса и не стояло, там даже одну операцию не стараюся привести к одному моменту времени. :) более менее понял. всегда считал, что select и все что он дергает работают по единому снимку. еще надо перечитать доку по ссылке Елика (большое спасибо еще раз ему). Спасибо за разъяснения. Хорошо что хоть ща узнал. Лучше поздно, чем никогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 16:04:56 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggСергей Арсеньевпропущено... В этом и заблуждение. select -это операция. Транзакция это множество операций. И да если явно не указано, то Oracle не старается привести все операции одной транзакции к одному моменту времени. Был бы у Вас Постгрес - там бы вопроса и не стояло, там даже одну операцию не стараюся привести к одному моменту времени. :) более менее понял. всегда считал, что select и все что он дергает работают по единому снимку. еще надо перечитать доку по ссылке Елика (большое спасибо еще раз ему). Спасибо за разъяснения. Хорошо что хоть ща узнал. Лучше поздно, чем никогда. и все таки. цепляясь к мелочам - в данном случае выходит, что селект - несколько последовательных операций чтения, не объединенных в единую транзакцию. транзакция хоть и разнесена по времени, но игнорирует все транзакции, которые выполнились после ее начала. в данном случае такого не происходит. объединять селект в транзакцию нужно принудительно. или я опять чушь несу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 17:04:29 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggк крайнему своему стыду только сегодня узнал, что в запросе вида Код: plsql 1. 2. 3. при Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. возможна ситуация, когда myfunc ругнется no_data_found - при удалении в другой сессии записи из tbl с id = 1 в момент запроса (но до того, как отработала myfunc)ругнётся ли функция ноу_дата_фаундом в запросе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 22:01:50 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
andreymxругнётся ли функция ноу_дата_фаундом в запросе?зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2016, 23:29:39 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggВячеслав ЛюбомудровСобственно, кроме тормозов (переключение контекста, в частности) это является еще одним критерием нежелательности вызова PL/SQL кода из SQL оператора. как все запущено..вообще ничего не знал о подобной нежелательности...Не, ну не настолько все плохо Если PL/SQL функция не лезет в БД (не вызывает в свою очередь SQL), то как бы и хрен с ним, тут главное уменьшить кол-во вызовов. А вот то, что каждый SQL внутри PL/SQL имеет свой стартовый SCN может приводить к странным, трудноповторимым и трудноуловимым ошибкам Особенно это обидно, когда что-то уже полностью оттестировано, проверено и результату доверяют. PS. Если функция, вызванная из SQL выкинет NO_DATA_FOUND, то это будет засчитано как возврат NULL Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 2 сессия Код: plsql 1. 2. 3. 1 сессия Код: plsql 1. 2. 3. 2 сессия Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 02:33:47 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
andreymxleggк крайнему своему стыду только сегодня узнал, что в запросе вида Код: plsql 1. 2. 3. при Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. возможна ситуация, когда myfunc ругнется no_data_found - при удалении в другой сессии записи из tbl с id = 1 в момент запроса (но до того, как отработала myfunc)ругнётся ли функция ноу_дата_фаундом в запросе? Да.проверенно собственным лбом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 06:19:46 |
|
||
|
вызов pls sql из sql (функция в запросе)
|
|||
|---|---|---|---|
|
#18+
leggandreymxпропущено... ругнётся ли функция ноу_дата_фаундом в запросе? Да.проверенно собственным лбом З.ы. встретилось в поделке небезысвестной компании цфт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 06:25:43 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=200&tid=1887408]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 339ms |

| 0 / 0 |
