Как передать NULL (или пустой) массив в callableStatement JDBC (который ожидает массив)
У меня возникают проблемы при передаче значения NULL в хранимую функцию JDBC (с помощью вызываемого оператора), которая ожидает тип массива. Это проблема, только если я пытаюсь установить для параметра IN значение NULL (например, я могу создать и передать пустой массив, но мне не нужно было этого делать).
Например, я могу сделать это в качестве обходного пути:
callableStatement.setObject(index, callableStatement.getConnection.createArrayOf("numeric", Array().asInstanceOf[Array[AnyRef]]))
Но это беспокоит меня. Прежде всего, должен быть API для передачи массивов NULL. Во-вторых, я создаю пустой массив без какой-либо веской причины (и мне нужно будет создать правильный тип массива, чтобы он не был однострочным, мне нужно будет поддерживать несколько разных типов). Это становится грязным.
Я должен быть в состоянии сделать это, я думаю (или, по крайней мере, что-то очень похожее):
callableStatement.setNull(index, Types.ARRAY)
Но это приводит к исключению:
com.edb.util.PSQLException: ОШИБКА: функция app_fetch_user_list_pkg.n_execute(изменение символа, изменение символа [], изменение символа, логическое значение, целое число) не существует
Есть идеи? (Мы работаем с Postgresql/EDB, а также с Oracle... пока я экспериментировал с экземпляром Postgresql).
2 ответа
Ну я пользуюсь PreparedStatement.setNull(position, Types.ARRAY)
с драйвером JDBC 9.4-1202-jdbc41, который работает как положено.