#java #postgresql #spring-jdbc #custom-data-type #callable-statement
Вопрос:
Я создал определенный тип данных для использования в функциях базы данных Postgres:
CREATE TYPE custom_object AS (status status, operation expiration_operation, expiry_date TIMESTAMP);
Примером функции будет:
CREATE OR REPLACE FUNCTION function_to_call(
in_object custom_object[]
)
RETURNS VOID
LANGUAGE plpgsql
AS $
BEGIN
RAISE NOTICE 'ARRAY RECEIVED';
END
$;
Из Postgres я могу использовать его следующим образом для массива типа «custom_object» :
select function_to_call(array[('Active', 'Expire', now() AT TIME ZONE 'UTC'), ('Completed', 'Delete', now() AT TIME ZONE 'UTC')]::custom_object[]);
Затем, с Java, я бы использовал Callablestatement.
final String[][] policy = {{"Active", "Expire",new Date().toString()},{"Completed", "Expire",new Date().toString()}};
final Connection conn = DatabaseConnectionProvider.getConnection(appConfig);
final CallableStatement stmt = conn.prepareCall("{call function_to_call(?)}");
Array arrayL;
arrayL = conn.createArrayOf("VARCHAR", labelArray.toArray());
stmt.setArray(1, policy);
Есть ли способ, которым я могу напрямую объявить тип этого массива как «custom_object», как ожидается функцией, или я должен передать его как обычный массив varchar, а затем выполнить некоторое приведение внутри процедуры?
Спасибо