Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
Переношу приложение с MS SQL на DB2 Пытаюсь в BIRT (The Business Intelligence and Reporting Tools) заполнить Dataset запросом содержащим в себе создание временной таблицы и переноса в нее малой часть данных их длинной таблицы (почти 100 миллионов записей). Dataset не заполняется в Datebase.net запрос отрабатывает. Из опыта работы с MS SQL для того чтобы композитный запрос сработал и вернул данные например в ADODB (VB) в начале должна стоять команда "SET NOCOUNT ON" есть ли в DB2 аналог? Ибо на "SET NOCOUNT ON" он дает ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 23:48 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
ProfSD, Это, случайно не DB2OPTIONS {+/-}m ? Но мне кажется проблема не в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 15:23 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
ProfSD, Покажите, как вы в своем композитном запросе создаете (в точности) и заполняете (можно схематично) временную таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 15:33 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
Переношу приложение на другую базу данных. Мне нужно перенести с MS SQL на DB2 запрос следующего вида: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Кроме всего прочего мне нужно воткнуть этот запрос в Dataset отчета реализованного на BIRT. В существующей версии приложения использовался самописный генератор отчетов на VB6 (MSSQL + VB + ADODB). В нем для того чтобы запросы с временными таблицами нормально отрабатывали запрос должен был начинаться c set nocount on . Но DB2 эту команду не понимает. А без set nocount on DataSet в BIRT его тоже обрабатывать не хочет , возвращает пустой набор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 16:36 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSD, Может быть BIRT ожидает, что источник MSSQL и не настроен на DB2, поэтому и "требует" SET NOCOUNT ON? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 17:51 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSD, Кстати, а зачем убивать в конце таблицу? - сама должна умереть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 17:55 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSD, И что, вы как-то этому DataSet сообщаете, что данные надо взять из таблицы SESSION.temptable? Если да, то зачем вы DROP TABLE делаете после INSERT ... SELECT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 18:07 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, сам drop не влияет в финальной версии он в начале и с условием если таблица есть то убиваем и пересоздаем (и вообще без дропа пробовал ). А сама она не умрет, отчет запускается на сервере отчетов от имени админа.... там сессия может годами висеть. Хуже всего что BIRT ошибку не выдает, и ни куда ее не пишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 18:29 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
knudsen, нет настроен он корректно, запросы из одного селекта обрабатываются без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 18:30 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, а разве этого не достаточно: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 18:31 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSDMark Barinstein, а разве этого не достаточно: Код: sql 1. Я честно, говоря, не знаю, как устроены эти DataSet, но если он внутри себя ожидает, что, вызвав вот этот сложный запрос, он должен получить ResultSet, то он его не получит - в DB2 compound statement не возвращает ResultSet. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 18:41 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSD, Если попробовать с регулярной таблицей взамен временной и получится такой же результат, тогда дело не в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 11:01 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein, Попробовал воспроизвести ситуацию на VBA c через ADODB результат аналогичный. Ошибки при обработке запроса не происходит ADODB.Recordset инициализируется но adorec.Fields.Count=0. Я правильно понял что DB2 в случае если в запросе есть что то еще кроме select возвращает не результирующий набор (из последнего select ), а какую то другую структуру данных? И для того чтобы получить стандартный результирующий набор нужно запускать запросы по очереди внутри одной сессии. Есть какие то библиотеки которыми можно разобрать такой ответ от сервера, стандартные клиенты например Database.Net такие запросы обрабатывают без проблем и каким то образом получают ResultSet. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 11:33 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
knudsen, с постоянной таблицей будет такой же результат. Дело не в самой таблице а в том что одним пакетом на сервер уходят 5 последовательных запросов, в этом случае сервер возвращает не чистый набор данных по последнему select а присылает еще какую то служебную информацию по результату отработки первых 4х запросов (вроде как количество затронутых строк и результат выполнения запроса ). Инструмент ( MXReportDataSetImpl ] http://api.gjcq176.com/Javadocs75/Javadocs7500/com/ibm/tivoli/maximo/report/script/MXReportDataSet.html ) через который я оправляю запрос ждет от сервера именно результат работы Select, насколько я понимаю в результате он хватает ответ по первому запросу и так как это не набор строк (но при этом сервер прислал статус успешного выполнения запроса) то эесепшон не генерится но и данных ни каких в отчет не приходит. В MS SQL проблема решалась SET NOCOUT ON , после чего MS SQL больше не отсылал промежуточные результаты а возвращал только результат последнего селекта в запросе. Мне нужно аналогичное решение для DB2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 11:48 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
knudsen, DB2OPTIONS {+/-}m по описанию очень похожа, но на сколько я понял это команда для командной строки AIX. А мне нужно отключать вывод отчетов по количеству строк из SQL из SQL Запроса, чтобы результат запроса вида: " CREATE TABLE .... INSERT .... INSERT .... SELECT .... " Можно было принять в обычный RescordSet (Например ADODB.RescordSet), что бы база не возвращала результаты (чтоб приложение не видело что перед селектом были еще какие то действия ) первых 2х запросов а вернула только результат селекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 12:16 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSD, А что-нибудь такое пробовали? Или обязательно с промежуточной таблицей? Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 13:24 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSD, Есть такой параметр для DB2OPTION - "o" , если его выставить, то ничего на "экран" выводить не будет или по другому db2=> Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 13:36 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
PSDMark Barinstein, Попробовал воспроизвести ситуацию на VBA c через ADODB результат аналогичный. Ошибки при обработке запроса не происходит ADODB.Recordset инициализируется но adorec.Fields.Count=0. Я правильно понял что DB2 в случае если в запросе есть что то еще кроме select возвращает не результирующий набор (из последнего select ), а какую то другую структуру данных? И для того чтобы получить стандартный результирующий набор нужно запускать запросы по очереди внутри одной сессии. Есть какие то библиотеки которыми можно разобрать такой ответ от сервера, стандартные клиенты например Database.Net такие запросы обрабатывают без проблем и каким то образом получают ResultSet. Всё зависит от того, как именно оно воспринимает и выполняет то, что вы написали. В DB2 есть 2 типа запросов - "простые" и "сложные". Простые состоят из одной SQL команды, сложные - из нескольких, разделяемых внутри символом ';' и заключенные в begin atomic ... end или begin atomic ... end. Никаких структур данных или результирующих наборов сложный запрос не возвращает. Считайте, что вы вызываете хранимую процедуру, которая ничего не возвращает в случае сложного запроса. Судя по тому, что вы написали, оно у вас воспринимает ваш ввод как 5 простых запросов. Иначе оно не выполнило бы SELECT "в никуда" внутри сложного запроса. А вот как оно эти запросы обрабатывает и почему не сохраняет результирующий набор, который последний SELECT возвратил - трудно сказать. Надо документацию по этим компонентам читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 22:16 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
knudsenPSD, А что-нибудь такое пробовали? Или обязательно с промежуточной таблицей? Код: sql 1. 2. 3. Спасибо WITH решил текущую проблему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 10:44 |
|
||
|
SET NOCOUNT ON для DB2
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinPSDMark Barinstein, Попробовал воспроизвести ситуацию на VBA c через ADODB результат аналогичный. Ошибки при обработке запроса не происходит ADODB.Recordset инициализируется но adorec.Fields.Count=0. Я правильно понял что DB2 в случае если в запросе есть что то еще кроме select возвращает не результирующий набор (из последнего select ), а какую то другую структуру данных? И для того чтобы получить стандартный результирующий набор нужно запускать запросы по очереди внутри одной сессии. Есть какие то библиотеки которыми можно разобрать такой ответ от сервера, стандартные клиенты например Database.Net такие запросы обрабатывают без проблем и каким то образом получают ResultSet. Всё зависит от того, как именно оно воспринимает и выполняет то, что вы написали. В DB2 есть 2 типа запросов - "простые" и "сложные". Простые состоят из одной SQL команды, сложные - из нескольких, разделяемых внутри символом ';' и заключенные в begin atomic ... end или begin atomic ... end. Никаких структур данных или результирующих наборов сложный запрос не возвращает. Считайте, что вы вызываете хранимую процедуру, которая ничего не возвращает в случае сложного запроса. Судя по тому, что вы написали, оно у вас воспринимает ваш ввод как 5 простых запросов. Иначе оно не выполнило бы SELECT "в никуда" внутри сложного запроса. А вот как оно эти запросы обрабатывает и почему не сохраняет результирующий набор, который последний SELECT возвратил - трудно сказать. Надо документацию по этим компонентам читать. Совместно с админам выяснили что в этом компоненте видимо есть какая то предобработка запросов. Оказалось что запросы содержащие "CREATE .... " и "INSERT ..." как по отдельности так в "сложном" запросе в принципе не доходят до базы, как и запросы с ";" . А мне еще казалось что то как быстро все отрабатывает, например в Database.net если запрос с ошибкой, ошибка выскакивает гораздо дольше. При этом в англоязычном сообществе разработчиков BIRT есть топики по отчетам изменяющим данные. И вроде как пишут что это возможно, но к сожалению без конкретики какой пакет они используют и исходного кода (или просто я его не вижу так как доступ не платный). Видимо так как это пакет производимый IBM для своей платформы IBM MAXIMO и возможно там CREATE .... " , "INSERT ..." и "UPDATE..." принципиально зарезаны из соображений безопастности или увеличения продаж лицензий на основной продукт. Типа смотреть пожалуйста просмотр отчетов не требующий доплицензий, а если хочешь менять то стандартная лицензия и кастомизация приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2016, 11:02 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=39172906&tid=1600647]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
85ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 289ms |
| total: | 481ms |

| 0 / 0 |
