-1

我正在尝试在表中查找行,这似乎在单元格值中有 DBCException。我似乎找不到一种快速的方法来找出具有此异常的唯一行。

存储在单元格中的错误:

DBCException:SQL 错误:[jcc][t4][1065][12306][4.18.60] 捕获 java.io.CharConversionException。详见附件 Throwable。错误代码=-4220,SQLSTATE=null

PrimaryKey SomeColumn

1          A

2          B

3          C

4          DBCException: SQL Error...

5          DBCException: SQL Error...

在搜索时,这是我在这个问题上遇到的唯一帮助链接: https ://www.ibm.com/support/pages/sqlexception-message-caught-javaiocharconversionexception-and-errorcode-4220

在这里作为诊断,它提到找到 Hex(col)。但是,我似乎无法缩小有错误的行,以便修复它。

我能够找出哪一列有错误。我的问题是,如何缩小行的范围?

4

1 回答 1

0

我已经想出了如何查询有异常的行。所以例外是关于无效字符,所以我们将通过以下方式缩小结果:

  1. 选择所有具有非空值的行
  2. 选择所有包含有效字符的行
  3. 减去这两个数据集,您将得到包含无效字符的行。

询问: SELECT * FROM ( select id, column from table WHERE column IS NOT NULL minus select id, column from table where TRANSLATE(TRANSLATE(TRANSLATE(column,'','!@#$%^&*()-=+/\{}[];:.,<>?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),'','''"')) = '' AND column IS NOT NULL )

现在您还可以通过以下方式删除无效字符来替换受影响行中的内容。

UPDATE table SET column = regexp_replace(column,'[^a-zA-Z-\d]',' ') WHERE id IN ( SELECT id ( select id from table WHERE column IS NOT NULL 减去 select id from table where TRANSLATE( TRANSLATE(TRANSLATE(列,'','!@#$%^&*()-=+/{}[];:.,<>?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'),'','''"')) = '' AND 列不为 NULL ))

于 2020-08-19T20:58:24.440 回答