Por que recebo um erro de conversão de dados ao mesclar uma matriz (onde a atualização funciona bem)?
// Data conversion error converting
// "'[5, 6]' (B: ""ARR"" INTEGER ARRAY)"
MERGE INTO B
USING VALUES (?) _v(arr)
ON B.id IN(1)
WHEN MATCHED THEN
UPDATE SET arr = _v.arr
WHEN NOT MATCHED THEN
INSERT (arr) VALUES (_v.arr)
// works
UPDATE B
SET arr = ?
WHERE B.id IN(1)
Parece que o array é recebido como uma string de texto para a mesclagem, embora eu prepare o array da mesma maneira para atualização e mesclagem:
preparedStatement.setArray(1, connection.createArrayOf("INT", Array(5, 6))
Preciso adicionar um elenco em algum lugar para matrizes ou o que estou fazendo de errado?
H2 compila declarações preparadas imediatamente por motivos de desempenho. Os parâmetros ainda não foram definidos, portanto, H2 não consegue determinar seus tipos de dados em alguns casos. Quando você cria uma tabela como essa,
VALUES (?) _v(arr)
H2 não conhece o tipo de dados daarr
coluna e assume uma sequência de caracteres por padrão.Você precisa adicionar conversões explícitas em torno dos parâmetros JDBC nesses casos: