|
|
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Добрый день. Проясните механизм обращения к функции: Код: 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. Nextval 1 Код: plsql 1. 2. currval 1 Код: plsql 1. 2. 3. 4. currval 3 Код: plsql 1. 2. 3. 4. 5. 6. currval 4 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. currval 6 Почему в последнем запросе функция вызывается дважды, а не один раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 16:18 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Gogol, По разу на каждый зависимый от функции элемент select кляузы. Хочешь вызвать один раз- так и скажи. Ты же оставил это на откуп оптимизатору. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 16:24 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
XMLer, Как вызвать один раз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 16:27 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
/*+NO_MERGE*/ во внутренний запрос и будет как ждёте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 16:28 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
JaRo, Да, ваша правда Код: plsql 1. CURRVAL 18 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. CURRVAL 19 Спасибо, читаю про данный хинт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 16:45 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
JaRo/*+NO_MERGE*/ во внутренний запрос и будет как ждёте Будет ли? Код: 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. А вот так будет: Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 16:53 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
GogolСпасибо, читаю про данный хинт. Читай, может вычитаешь что hint это подсказка а не требование так-что оптимайзер может по...ить твой хинт. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 16:57 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SY, Да, интересное поведение. Сможете написать с чем связано такое поведение хинта на разных инстансах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 17:01 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Всего то хотел пару значений из функции передать не прибегая к конвеерной(pipelined) функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 17:04 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 17:05 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Gogol, вот поэтому изначальную задачу надо формулировать. и потом пути решения уже описывай. открой для себя in out параметры в функциях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 17:09 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
VintGogol, вот поэтому изначальную задачу надо формулировать. и потом пути решения уже описывай. открой для себя in out параметры в функциях. Ну тут ты сVintил - нельзя функцию с OUT, IN/OUT параметрами вызвать из SQL. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.04.2017, 19:21 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SYНу тут ты сVintил - нельзя функцию с OUT, IN/OUT параметрами вызвать из SQL.А я в 12с могу. Хоть процедуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 07:02 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
ElicА я в 12с могу. Хоть процедуру. Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 13:29 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 18:28 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Не понял? Завернуть функцию с out in/out параметрами в функцию с in параметрами и вызвать её из SQL можно хоть в Oracle 7. Ты бы привел пример вызова функции с out in/out параметрами из SQL напрямую. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 22:17 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SYНе понял?Это разные "задачи": SYфункцию с OUT, IN/OUT параметрами вызвать из SQL.SYвызова функции с out in/out параметрами из SQL напрямую Поаккуратнее надо с категоричностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 23:11 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
ElicПоаккуратнее надо с категоричностью. Ты бы топик перечитал а не вырывал бы из контекста. А уж если "Поаккуратнее надо с категоричностью" то говорил я о вызове функции c out in/out параметрами ИЗ SQL а не ИЗ PL/SQL как в твоем примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2017, 23:41 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SYя о вызове функции c out in/out параметрами ИЗ SQL а не ИЗ PL/SQL как в твоем примере.По твоей логике получается, что ниже вызов функции из PL/SQL? Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 07:22 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
ElicПо твоей логике получается, что ниже вызов функции из PL/SQL? Не прикидывайся. Ты ведь прекрасно понимаешь про SQL машину и про PL/SQL машину и про context switch и что подразумевается под вызовом UDF из SQL. Но уж если тебе так хочется, то пожалуйста - я буду "поаккуратнее надо с категоричностью" и уточню - вызов функции с out in/out параметрами из SQL предложения или, из SQL выражения (в документации используются оба термина). SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 13:49 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Про rownum еще никто не сказал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 15:43 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
На днях материализовывал, материализовывал, но так и не выматериализовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 17:09 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Да просто все такие функции надо объявлять детерминистик.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 18:05 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
xtenderДа просто все такие функции надо объявлять детерминистик.. Ага, ообенно с SYSDATE . SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 18:58 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Да и не факт что поможет: Код: 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 19:46 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SY, С sysdate вообще надо делать оператор, а не функцию, иначе sysdate будет меняться внутри функции. Детерминистик кстати хотя бы уменьшит количество одинаковых вызовов для разных строк за счёт кэширования, а для разных столбцов это не поможет, т.к кэширование работает для каждого столбца своё. В твоёмпримере глянь на проекции и там будет показано что функция подставилась в оба столбца. Вообще я всё это уже описывал в деталях у себя блоге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 20:34 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SY, тестовый код Код: 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. результаты Код: 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. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 20:50 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
xtenderС sysdate вообще надо делать оператор, а не функцию, иначе sysdate будет меняться внутри функции. Вот тут согласен иначе получим разные значения для разных строк одного и того-же предложения, но тут и это не поможет. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 20:52 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Вячеслав ЛюбомудровПро rownum еще никто не сказал?да, с точки зрения и надёжности и широты применения, rownum > 0 - самое подходящее. А детерминистик я считаю вообще надо практически везде добавлять, кроме редких случаев когда действительно нужно чтобы каждый вызов был выполнен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 21:04 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
xtenderА детерминистик я считаю вообще надо практически везде добавлятьДаже если функция не предназначена для SQL? Или на самом деле недетерминирована (да-да, такие тоже бывают)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 21:14 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Elic, Deterministic и в pl/sql помогает - оптимизатор может перемещать выполнение или выносить из циклов. А насчёт "недетерминирована" - это я как раз отнес к тем редким случаям, когда каждый вызов важен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 21:19 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 21:21 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
xtenderда, с точки зрения и надёжности и широты применения, rownum > 0 - самое подходящее. И куда этот rownum втыкать? А то ведь может быть и обратный эффект: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 21:22 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SY, это сайд-эффект от самого sql*plus'a - либо в другом клиенте, либо внутри pl/sql блока проверь: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 21:43 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SY, либо просто первой строкой отфетчить что-нибудь ненужное: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 21:46 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SYJaRo/*+NO_MERGE*/ во внутренний запрос и будет как ждёте Будет ли? Код: 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. к слову, тут тоже "магия" sql*plus'a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2017, 22:31 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
Тему про возврат нескольких значений функцией для выражения SELECT вынес в отдельную тему. http://www.sql.ru/forum/1257342-a/kakie-sposoby-est-chtoby-funkciya-vernula-nabor-poley-i-kak-ispolzovat-v-select ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2017, 09:40 |
|
||
|
Почему функция вызывается 2 раза?
|
|||
|---|---|---|---|
|
#18+
SY, видимо надо кроме зеленого смайлика еще какой нибудь вводить. чтобы было понятна что это шутка на фразу "Всего то хотел пару значений из функции передать не прибегая к конвеерной(pipelined) функции" учитывая описания автора можно было домыслить что угодно. жаль поздно заметил что вы там развели бурную дискуссию по этой теме) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2017, 11:26 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1886090]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 392ms |

| 0 / 0 |
