|
PL SQL: как переписать хранимую функцию на обычный JOIN?
|
|||
---|---|---|---|
#18+
Добрый вечер. Я тут вот с чем столкнулся: переводим отчеты с Oracle на SAP (СУБД Sybase). Поэтому возникла необходимость уйти от оракловых хранимых функций. Вот такой запрос: (вникать во все не нужно, меня интересуют лишь хранимые функции kollecto.getlegalgroup_ce() и kollecto.getlegalbranch( )branch, которые нужно заменить на джоины, получив при этом тот же самый результат: Код: 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.
Вот одна из 2х хранимых функций. Эта функция принимает 2 значения: p_ceid и p_date, возвращает v_legalgroup. Код: 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.
В общем, я тут голову уже сломал. Пытался сделать во FROM через вложенные подзапросы, но столкнулся с проблемой видимости v_idusr в другом подзапросе при расчете v_legalgroup, где на v_idusr связка идет. Хотелось бы найти более-менее лаконичное решение, которое будет в дальнейшем использоваться вместо этой функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 00:10 |
|
PL SQL: как переписать хранимую функцию на обычный JOIN?
|
|||
---|---|---|---|
#18+
d.mityaevвникать во все не нужноСударь, Вы просто феерически наглый паразит. Если бы Вы попытались объяснить логику и предоставить пример данных, вероятно и решение появилось бы без помощи посторонних. Но Вы предлагаете незнакомым людям из интернета разбираться в Вашем коде, который ничего кроме чувства острого отвращения не вызывает. И главный просчёт в том, что если требуется написать запрос для Sybase, то и спрашивать стоит на форуме Sybase (накрайняк MSSQL), а не на форуме оригинала поскольку Вы не в состоянии описать логику словами. Ваше омерзительное distinct first_value переписывается в Оракле через keep dense_rank, а в Sybase уже иначе. Для начала рекомедуется уйти от этого, потом объединить второй и третий запрос в один, потом уже покумекать как полученное объединить с первым. Форум предназначен для помощи по техническим вопросам, а не для того, чтоб бесплатно делать работу за некомпетентных наглых лодырей. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 01:46 |
|
PL SQL: как переписать хранимую функцию на обычный JOIN?
|
|||
---|---|---|---|
#18+
Я не лодырь, я в 1й раз столкнулся с такой задачей - уйти от хранимой функции. То, что написано в хранимой функции - мне понятно, но непонятно как это переписать в сам запрос. По идее, если ее переписать на JOIN, то такой запрос будет и в Sybase работать. Хотя, по-хорошему надо бы написать хранимые функции на Sybase, чтобы каждый раз не заморачиваться с вычислением "группы юристов" (legal_group) и "подразделением" (branch), но Sybase это новая для нас СУБД, мы еще толком не знаем ее возможностей и того, чего там нет. В хранимой функции есть 3 переременные: 1) v_idusr - по журналу смены владельцев (tver.coj) тут расчитывается последний владелец для каждого coj.ceid (это id случая просрочки уплаты по договору) 2) v_first_group - расчитывается первая группа для v_idusr (у юзера может меняться группа) 3) v_legalgroup - это уже значение, возвращаемое хранимой функцией. Тут мы с использованием ранее расчитанного v_idusr вычисляем группу, к которой относится юрист. Если эта группа NULL - заменяем её на v_first_group. Так вот, проблема в том, что каким образом это можно переделать на JOIN? Я сомневаюсь в том, могу ли я взять и связать все таблицы, фигурирующие в хранимой функции и затем уже расчитывать то, что там было в переменных? И опять же, если связывать, какую из таблиц взять за основную "таблицу фактов" и к ней уже остальные присоединять? (боюсь, как бы данные снова не урезало) Я пробовал это переписывать на подзапросы, с первыми 2мя перемеными - получилось, но дело застопорилось на 3-ей, т.к. мне нужно было передать в запрос и v_first_group, и v_idusr, а при их расчете distinct стоит - второе поле со значением из подзапроса так просто не воткнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 10:32 |
|
PL SQL: как переписать хранимую функцию на обычный JOIN?
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7.
ну и самa ф-ция очень похожa на говнокод. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 15:17 |
|
PL SQL: как переписать хранимую функцию на обычный JOIN?
|
|||
---|---|---|---|
#18+
SYочень похожa на говнокод. почему похожа? говнокод и есть... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2019, 16:12 |
|
|
start [/forum/topic.php?fid=52&msg=39872145&tid=1882013]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 410ms |
0 / 0 |