|
Вычислить запись в базе с ошибочным значением.
|
|||
---|---|---|---|
#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=39962794&tid=1600189]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 134ms |
0 / 0 |