|  | 
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Добрый день. Как всё же грамотно справляться с такой проблемой: Предположим имеем таблицу Table1 с двумя полями: code smallint, data varchar(10) Предположим делаем запрос Select code, cast(data as date) mdate from Table1 и на какой-то строке нарываемся на неверное строковое представление даты, типа '32.01.2019' приводящее к падению запроса с SQLSTATE=22007 Хотелось бы как-то вычислить значение поля code на котором значение data не валидное. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 14.05.2020, 17:48 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Код: sql 1. 2. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 14.05.2020, 17:56 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Guzya, Нет, я не знаю какая там дата в строке. Так бы было совсем просто. Просто запрос кастует тысячи записей из стринга в дату и на какой-то спотыкается. Что бы его поправить в комплексе ПТК нужно знать номер. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 14.05.2020, 17:59 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Дайте угадаю, НВП или КС. Смотрите group by Код: sql 1. можно еще так Код: sql 1. т.е. "кривые" даты не сгруппируются в большом количестве, а дальше глазами. Можно еще конечно ч\з регулярное выражение попробовать. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 14.05.2020, 18:10 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ mahaon2000, Добрый день. Строки в формате 'DD.MM.YYYY'? Если да, то: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. TRANSLATE преобразует 'DD.MM.YYYY' в нужный для XML функции 'YYYY-MM-DD'. При невозможности преобразования в дату DT_SAFE будет NULL, что и проверяется. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 14.05.2020, 20:18 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Ну, да, группировка, конечно, по подозрительным полям для выверки напрашивается, а Марк вообще предложил доселе неизвестный мне интересный способ.  Будем выверять. Спасибо PS Guzya, КС ;) ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 15.05.2020, 07:56 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Всё же продолжу.  Зря я упростил суть вопроса. Представим, что таких таблиц N и запрос с кучей join на каком-то этапе вываливается с SQLSTATE=xxxxx.  Какими инструментами или методами можно выявить объект базы приводящий к ошибке? Как максимально локализовать проблему?  Трассировку бы какую... ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 27.05.2020, 10:40 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Смотри по типу ошибки, обычно проблема с датами, которые не даты. Начинаешь в скрипте отключать части где присутствует работа с возможными проблемными полями пока не найдешь нужную таблицу. Хотя с другой стороны, в скрипте на КС скорее всего 3-5 таблиц которые сами с собой соединяются, так что по выше описанным методикам проверить эти таблицы возможно будет быстрее. А можно написать скриптик проверки этих таблиц и ежедневно вечером запускать, и с утра иметь представление о возможных проблемах. Так сказать работа на упреждение. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 27.05.2020, 10:56 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ Guzya, увы, но проблемы могут быть не только с датами, а например  с id который в одной таблице BIGINT а в другой VARCHAR и вот когда делаешь join по ним (через cast), то база, в случае если в первой таблице id = NULL выплюнет DECFLOAT SQLSTATE=22018. Ковырять запрос на 300 строк порой очень проблематично. Должен же быть какой-то инструмент... Ну показывает же dbvizualiser fetch result по которому видно что 800 записей отфетчил нормально а на 801 запрос упал, значит какие-то данные об этой ошибочной 801 хотя бы частично где-то на сервере есть? ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 27.05.2020, 11:34 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ mahaon2000 Guzya, увы, но проблемы могут быть не только с датами, а например  с id который в одной таблице BIGINT а в другой VARCHAR и вот когда делаешь join по ним (через cast), то база, в случае если в первой таблице id = NULL выплюнет DECFLOAT SQLSTATE=22018. Ковырять запрос на 300 строк порой очень проблематично. Должен же быть какой-то инструмент... Ну показывает же dbvizualiser fetch result по которому видно что 800 записей отфетчил нормально а на 801 запрос упал, значит какие-то данные об этой ошибочной 801 хотя бы частично где-то на сервере есть? Для проблем с математикой смотрите DFT_SQLMATHWARN параметр базы ( https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.admin.config.doc/doc/r0000195.html). ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 27.05.2020, 13:36 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ CawaSPb  Для проблем с математикой смотрите DFT_SQLMATHWARN параметр базы  А тут скорее не проблемы с математикой, а проблемы с запросом. Да и менять этот параметр на чужой базе чревато: "You should only change the setting of dft_sqlmathwarn for a database after carefully evaluating how the new arithmetic exception handling behavior might impact check constraints, triggers, and views. Once changed, subsequent changes require the same careful evaluation." ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 27.05.2020, 13:50 |  | ||
| 
Вычислить запись в базе с ошибочным значением. | |||
|---|---|---|---|
| #18+ mahaon2000 Представим, что таких таблиц N и запрос с кучей join на каком-то этапе вываливается с SQLSTATE=xxxxx.  Какими инструментами или методами можно выявить объект базы приводящий к ошибке? Как максимально локализовать проблему?  Трассировку бы какую... Код: plaintext 1. 2. 3. Код: sql 1. 2. 3. 4. 5. 6. 7. Либо использовать аналогичное выражение напрямую в запросе. В поля выборки можно добавить выражение показывающее, что преобразование завершилось неудачно - если сама строка NOT NULL, а преобразование вернуло NULL. Ничего более удобного и позволяющего быстрее найти проблему нет . Альтернативный вариант - трассировать соединение на сервере с помощью db2trc, но поверьте на слово, что вы навряд ли сможете понять, как полученной информацией пользоваться. Её будет очень много, и там тоже не будет указания в простом виде, что вот, мол, ошибка преобразования данных, которые пришли из такой-то физической записи в такой-то таблице. ... | |||
| : 
 Нравится:
     Не нравится:
     | |||
| 28.05.2020, 11:30 |  | ||
|  | 

| start [/forum/topic.php?fid=43&msg=39957636&tid=1600189]: | 0ms | 
| get settings: | 10ms | 
| get forum list: | 12ms | 
| check forum access: | 3ms | 
| check topic access: | 3ms | 
| track hit: | 41ms | 
| get topic data: | 10ms | 
| get forum data: | 3ms | 
| get page messages: | 47ms | 
| get tp. blocked users: | 1ms | 
| others: | 12ms | 
| total: | 142ms | 

| 0 / 0 | 
