|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Требуется найти в БД все процедуры, в которых есть два и более выходных дата сета. То есть, в теле процедуры есть более одной конструкции вида Код: sql 1.
или Код: sql 1.
Пробовал анализ поля TXT из запроса: Код: sql 1. 2. 3.
и уперся в необходимость исключения трудно анализируемой кучи вариаций вроде Код: sql 1. 2. 3. 4.
и им подобных Вопросы: 1) Возможно кто то решал уже подобную проблему и есть готовый анализатор? 2) Существует кроме анализа текстов способ определения наличия двух селектов в процедуре? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:21 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Никак, ибо количество резалтсетов может зависит о входных параметров. Сколько резалтсетов в процедуре вида? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:29 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Точно, точно! Такие конструкции Код: sql 1. 2.
тоже надо анализировать. Вопрос получается сводится к тому - есть ли у кого то какие то наработки по анализу текстов? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:35 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Переберите в цикле все процедуры и всё..... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:41 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Молодой, И чтобы совсем жизнь малиной не казалась Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 15:44 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Re: "И чтобы совсем жизнь малиной не казалась" Задача не полностью автоматизировать этот процесс поиска, а просто получить единовременно точный список процедур кандидатов, плюс чтобы он был полный и максимально сокращенный. Потому, для начала, все тексты процедур приведу к единому формату - по одному пробелу, tab и переводу строки где надо. А потом запросами типа Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Сокращу список для ручного анализа ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 16:13 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Молодой, вы не учитываете фактор наличия динамического SQL, который почти 100% сводит все ваши потуги на нет. под такую задачу можно провести только частичный анализ. наиболее точный вариант будет только с реальным вызовом процедур в какой то CLR обертке вида: 1)получить список хранимок 2) для каждой хранимки: 3) выделить обязетельные параметры и назначить какие то дефолтные значения-заполнители (вот тут самая большая трабла поскольку логика ХП может быть завязана на значения и смоделировать автоматом все возможные варианты почти не возможно) 4) открыть транзакцию 5) запустить ХП на исполнение 6) получить результирующие наборы и подсчитать их кол-во 7) откатить транзакцию 8*) ну или не обязательно возиться с транзакцией можно установить set fmtonly on, но проблема с параметрами остается и да, это капец как не правильно ибо в логике хранимок может быть что угодно но пытаться парсить код: вы не охватываете достаточно большой объем вариантов ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 16:32 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Молодой Код: sql 1.
Код: sql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 16:42 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
env, Я понял про неправильность использования в REPLACE Код: sql 1. 2.
felix_ff, Динамического SQL нет в БД - Бог миловал. В свете того что народ написал, вижу задачу так: По приведенным к некому стандартному виду тексту процедур, написать запрос максимально сокращающий их список для визуального анализа кода ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 16:57 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Молодой, А какая итоговая цель? Ради чего такие сложности? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:06 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
env Молодой, А какая итоговая цель? Ради чего такие сложности? Новый (древний) клиент которого хотят прикрутить к базе не понимает более одного SELECT на выходе процедур SQL сервера ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:10 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Молодой, А не быстрее будет прогнать на тестовом контуре сценарии его использования? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:12 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
env, Похоже быстрее. Мало того, похоже что так оно и будет, так как по быстрому решить проблему не удается ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:16 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
А как вы намерены решить проблему, даже если найдёте такие процедуры? Канонически, процедуры не должны возвращать какие-либо датасеты. Просто комментарий без намёков. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:42 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Владислав Колосов Канонически, процедуры не должны возвращать какие-либо датасеты. Хм... А почему? Павда, интересно, потому что впервые слышу об этом. Какое обоснование этому? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 17:57 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
fkthat, назначение процедуры - выполнять некоторые действия над данными, с параметрами или без. процедуры может возвращать значения в выходных параметрах. Клиентский запрос получения данных обрабатывается прямым запросом, представлением данных или функцией. Функции, будучи программным кодом, как и процедуры, не могут выполнять операций изменения данных, но могут их возвращать. Вроде бы это постулаты отцов-основателей. По крайней мере, я так запомнил. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:06 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Владислав Колосов А как вы намерены решить проблему, даже если найдёте такие процедуры? Канонически, процедуры не должны возвращать какие-либо датасеты. Просто комментарий без намёков. 1) Тот небольшой список процедур (пока только одну знаем) перепишем под версией №2 с одним SELECT 2) Код старых клиентов нам доступен к исправлению - подправим их на использование Ver.2 3) Все новые клиенты пользуют Ver.2 4) Все старые оригинальную версию с двумя SELECT ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:13 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Молодой, при этом процедура должна "понять", что ее выполняет новый или старый клиент. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:19 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Владислав Колосов, Старый клиент про новую процедуру не знает - тупо, как и всегда делал, дергает старую версию. Новые знают только про новую процедуру и дёргают только её. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:23 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Молодой, а как вы сейчас используете эту процедуру, возвращающую несколько датасетов? Она вам сейчас необходима именно в таком виде? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 18:54 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
iap, Процедуру писал не я. Точно есть старые клиенты написанные тоже не мной на С++ и С# что её используют и живут (и должны далее жить) отдельной от меня жизнью. Трогать я эту процедуру соответственно не могу, а нового клиента прикрутить надо. Как то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:09 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Владислав Колосов fkthat, назначение процедуры - выполнять некоторые действия над данными, с параметрами или без. процедуры может возвращать значения в выходных параметрах. Клиентский запрос получения данных обрабатывается прямым запросом, представлением данных или функцией. Функции, будучи программным кодом, как и процедуры, не могут выполнять операций изменения данных, но могут их возвращать. Вроде бы это постулаты отцов-основателей . По крайней мере, я так запомнил. Возвращение датасета после сложнейших расчетов в ХП - чрезвычайно удобная штука. Н-р для отчетов. Ф-ции же имеют много ограничений. Н-р невозможность работы с времянками. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:11 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
на прошлой неделе столкнулся с тем, что не могу записать в таблицу результат работы динамического запроса на линкованном сервере. В запросе в курсоре вызывается процедура, которая возвращает датасет (хотя её об этом ни кто не просит). ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2020, 19:14 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
L_argo, это лукавство чистой воды, так как отчет может выполнять запросы к витрине. MS сделали коммерческий финт с датасетами, как и во многом другом, но все равно постоянно читаешь "а вот оракле то-да сё и здесь этого нет". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 00:52 |
|
Как определить наличие двух SELECT в процедурах БД?
|
|||
---|---|---|---|
#18+
Владислав Колосов, Датасеты из процедуры неприятны - отсутствием декларативности результата - вытекающей из этого сложностью определения количества и состава возвращаемых датасетов, без доступа к коду процедуры - проблемой вызова подобной процедуры в курсоре Проще говоря, датасеты из процедур вносят хаос в разработку. В рамках своего маленького мирка (например для отладки), возможно, пользоваться ими удобно, но как только процедурой начинает пользоваться кто-то ещё - начинаются проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2020, 09:46 |
|
|
start [/forum/topic.php?fid=46&fpage=44&tid=1685485]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 169ms |
0 / 0 |