Я пытаюсь выполнить callablestatement для хранимой процедуры (не функция - но процедура) в Postgresql 11.
Я создаю партию, готовую к выполнению, вот так:
int[] results;
final int batchsize = 1000;
CallableStatement Stmt = null;
final int batchsize = 1000;
String execString = "{call insertnewrecall(?,?,?,?,?,?,?,?,?,?,?,?,?)}";
Stmt = conn.prepareCall(execString);
for (RecallType recall : recallList) {
Stmt.setInt(1, recall.getReportid());
Stmt.setInt(2, recall.getInternalid());
Stmt.setString(3, recall.getPatsurname());
Stmt.setString(4, recall.getPatfirstname());
Stmt.setString(5, recall.getPatdob());
Stmt.setString(6, recall.getPatmobile());
Stmt.setString(7, recall.getPatemail());
Stmt.setString(8, recall.getDrfirstname());
Stmt.setString(9, recall.getDrsurname());
Stmt.setString(10, recall.getTestname());
Stmt.setString(11, recall.getCheckdate());
Stmt.setString(12, recall.getSource());
Stmt.setString(13, recall.getRecalltype());
Stmt.addBatch();
if(++count % batchsize == 0){
results = Stmt.executeBatch();
}
}
results = Stmt.executeBatch();
Хранимая процедура:
create or replace procedure insertnewrecall(
in p_reportid int,
IN p_internalid int,
IN p_patsurname varchar(100),
IN p_patfirstname varchar(100),
IN p_patdob varchar(100),
IN p_patmobile varchar(100),
IN p_patemail varchar(100),
IN p_drfirstname varchar(100),
IN p_drsurname varchar(100),
IN p_testname varchar(100),
IN p_checkdate varchar(100),
IN p_source varchar(100),
IN p_recalltype varchar(100))
as $$
declare lv_checkdate recallqueue.checkdate%type;
begin
.....
Я могу вызывать и вставлять новые строки в командной строке, и это, кажется, работает довольно хорошо, с данными, вводимыми в таблицу
Когда я пытаюсь вызвать процедуру через драйвер JDBC Postgresql (версия 42.2.5), он продолжает выдавать ошибку:
SQLException: Batch entry 0 select * from insertnewrecall
Hint: To call a procedure, use CALL.
Мне кажется, что драйвер JDBC пытается выполнить хранимую процедуру с помощью оператора SELECT, что будет соответствовать выполнению функции (основываясь на моем чтении онлайн-документации postgresql), а скорее он должен выдавать инструкцию "CALL", хотя моя строка CallableStatement имеет "{call insertnewrecall (?,? ...}"
Я схожу с ума, пытаясь разобраться, если это я или текущий драйвер JDBC не был обновлен, чтобы учесть возможность вызова процедуры сейчас, а не функции.
Кто-нибудь имел с этим опыт и может пролить свет или указать мне какую-то документацию, которую мне еще предстоит прочитать?
Приветствия