|
|
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
Добрый день! Выполняю запрос из оракла в базу ms sql, если не использую Group by, то данные извлекаются, а как только прикручиваю Group by - выдается ошибка "Ошибка предобработки Гетерогенными службами", при чем подчеркивает в коде строку выбора по дате... не пойму куда копать... Запрос простой: SELECT h1.HAR, n1.NOMENK, Sum(z1.ZER) FROM T_OPER@MSQL2 o2, T_SMEN@MSQL2 s2, T_SOTRUD@MSQL2 ss2, T_PODR@MSQL2 p2, T_ANALIZ@MSQL2 o1, T_NOMENKLAT@MSQL2 n1, T_HAR_ANALIZ@MSQL2 h1, T_ZER@MSQL2 z1 WHERE o2.DATA = to_char('20180517') AND o2.SMEN = s2.SMEN_KOD AND o2.BRIG = ss2.SOTRUD AND o2.PODR = p2.PODR and o1.ID=o2.ID and o1.NOMEN= n1.NOMEN and h1.ANALIZ = o1.ANALIZ AND h1.ZER = z1.ZER Group by h1.HAR, n1.NOMENK Если убираю в Selecte - Sum и строку Group by - то запрос выполняется без ошибок... Если оставляю, то при ошибке подчеркивает первый апостроф в строке to_char('20180517') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 07:47 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
Dr_Grizzly, перепиши на join ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 07:51 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
Dr_Grizzly, и вот это смущает: o2.DATA = to_char('20180517') масло масленное в MSSQL это поле типа date или как? если date, то преобразуй с помощью to_date если строка, то просто o2.DATA = '20180517' ну и т. д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 08:00 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
авторo2.DATA - это datetime формат в MSSQL. Пробовал to_date('17.05.2018','dd.mm.yyyy') Запрос висит минуту, а потом выдает ошибку [FreeTDS][SQL Server] Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона. {22007, NativErr = 242} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 08:09 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
При чем до смешного доходит - o2.DATA ='20180517' - Ошибка предобработки Гетерогенными службами а вот с to_char() ошибка не появляется, если нет Group ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 08:15 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
Это как-то связано с FreeTNS под Unix, если я меняю на другой tns использующий подключение к MSSQL через Windows ODBC, то запрос выполняется (но задача стоит - уйти от Windows поэтому FreeTNS подвернулся первым) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 08:33 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
Выньте дату из MSSQL, посмотрите. У меня было такое: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Не разбирался, просто вычел 2000 лет :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 09:01 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
В подобных случаях лучше отдавать запрос на сторону исполнения, чтобы он выполнялся целиком в источнике, по его правилам. Без ненужных и зачастую не понятных быстро конвертаций между разными диалектами sql (это не только к MS SQL относится, а и к другим, в том числе малоиспользуемым базам). для гетеродинных служб и подобных задач у оракла есть хороший пакет DBMS_HS_PASSTHROUGH можно сделать табличную функция с ним, подставляя запрос и вызывать потом селект из неё. я тут набросал по твоему кейсу: Код: 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. обрати внимание, что мы отдаём работу с датой на сторону источника. Ну и итоговый вызов будет c подстановкой нужной даты: Код: plsql 1. Допилить и расширить можно, если хотеть сделать общую функцию для вызова разных запросов. Естественно будет ограничено типами и количеством итоговых полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 09:37 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
авторDBMS_HS_PASSTHROUGH Вот это уже поинтересней будет, ща попробую завернуть его в свой код, проверю как себя поведет. Спасибо! авторВыньте дату из MSSQL, посмотрите Любопытный результат у вас получился... Обязательно проверю что у меня там. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 11:29 |
|
||
|
Выполнение запроса из Oracle в базу MS SQL. Агрегативный
|
|||
|---|---|---|---|
|
#18+
Dr_Grizzly, на здоровье ) В одном месте копипасту не заметил DBMS_HS_PASSTHROUGH.PARSE@fb_rdu_prom( разумеется, везде после собаки ваш дблинк в остальном - рабочий код (копипаста с моего личного), не зависит от типа драйвера... пакет этот хорош: всё, в том числе оптимизацию отдаёт на сторону источника. когда так соединяете FROM T_OPER@MSQL2 o2, T_SMEN@MSQL2 s2 то выборка по каждой из таблиц тащится на сторону оракла и соединяется уже на вашей стороне - лишняя нагрузка, от которой можно избавиться, отдав все расходы в источник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 11:46 |
|
||
|
|

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

| 0 / 0 |
