Я использую PostgreSQL, и у меня есть функция, которая возвращает запись:
CREATE OR REPLACE FUNCTION fn_lisMatricula()
RETURNS record AS
$BODY$
SELECT mat.codigo as codmatr, mat.codigoalumno as codal, mat.codigoempresa as codemp ,mat.codigopresentacion as codpre,
mat.codigosecretaria as codsec, mat.fecha as fechamat, mat.estado as estadomat,
mat.vigencia as vigmat, p.apellidos as apeAl,
p.nombres as nomAl,razonsocial ,pre.codigocurso as codcur,cur.nombre as curso
FROM matricula mat join alumno al on mat.codigoalumno = al.codigoalumno
join persona p on al.codigoalumno = p.codigo
join persona pe on mat.codigoalumno = pe.codigo
left join empresa emp on mat.codigoempresa = emp.codigo
join presentacion pre on mat.codigopresentacion = pre.codigo
join curso cur on cur.codigo = pre.codigocurso
order by p.apellidos
$BODY$
LANGUAGE sql VOLATILE
Я называю это так, потому что я должен объявить тип выходных значений, который отлично работает в Postgres:
select * from fn_lisMatricula() as (codmatr integer,codal integer,codemp integer,codpre integer,codsec integer,fechamat date,
estadomat char,vigmat boolean,apeal varchar,nomal varchar,razonsocial varchar,codcur integer,curso varchar)
Но чтобы вызвать это в callableStatement в java, я использую:
proc = this.cn.prepareCall("{call fn_lisMatricula()}")
Но я получаю postgreSQL.exception:
список определения столбцов требуется функциям, возвращающим «запись»
Поэтому я временно решил это на Java с помощью подготовленного заявления:
PreparedStatement ps;
String SQL = "select * from fn_lisMatricula() as (codmatr integer,codal integer,codemp integer,codpre integer,codsec integer,fechamat date,\n"
+ "estadomat char,vigmat boolean,apeal varchar,nomal varchar,razonsocial varchar,codcur integer,curso varchar)";
ps = this.cn.prepareStatement(SQL);
Я хочу использовать callableStatement. Как я могу это сделать?