我的PostgreSQL数据库中有这个功能。
create or replace function borrowaCar(integer,integer,date) returns boolean language 'plpgsql' as'
declare
borrow boolean;
begin
if exists(select * from availableCars where id=$2)then
insert into Borrows (car_id_car, person_id_person, borrow_date, return_date) values ($2,$1,$3, NULL);
update Car set is_borrow=true where id_car=$2;
return true;
end if;
return false;
end;
';
当我构建查询时,我想在2017-09-06中添加YYYY-MM-DD中的实际日期。我写这段代码:
Query query = entityManager.createNativeQuery("SELECT borrowaCar(?,?,?)");
query.setParameter(1, idPerson);
query.setParameter(2, idCar);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
query.setParameter(3, sdf.format(date));
但是这个解决方案会返回错误:
org.postgresql.util.PSQLException:错误:function borrowacar(整数, 整数,字符变化)不存在Wskazówka:没有功能 匹配给定的名称和参数类型。您可能需要添加 显式类型转换。
问题是什么?
答案 0 :(得分:0)
问题在于您定义的功能
borrowaCar(integer, integer, date)
与您的参数不匹配:
borrowacar(integer, integer, character varying)
调用sdf.format(date)会返回一个String,并被解释为"字符变化"。你需要在Table Borrows的Column borrow_date中使用definded类型。