我有一个SQL函数(在Postgres中),我想用Diesel调用它。我已经用sql_function!
宏声明了它,我可以调用函数OK。但是我不能得到返回值-它总是返回1
,我假设它是一个行数。我怎么才能得到实际的返回值呢?
sql_function! {
fn my_add(a: Int4, b: Int4) -> Int4;
}
let my_add_fn = my_add(2, 4);
let result = diesel::select(my_add_fn).execute(&conn).unwrap();
dbg!(&result); // This prints 1. Should be 6
当我从Postgres CLI调用my_add
时,它工作正常:
select my_add(2, 4);
my_add
--------
6
(1 row)
这里是my_add
函数
CREATE OR REPLACE FUNCTION my_add(
a integer,
b integer
)
RETURNS integer
AS $$
BEGIN
return a + b;
END;
$$ LANGUAGE plpgsql
IMMUTABLE;
1条答案
按热度按时间lpwwtiir1#
这是一个老问题,但我想我会张贴一个回应,以防其他人在这里降落。
当您调用
execute
时,返回的只是受影响的行数。请参见:getting started guide,并搜索"get_result"
.在一个select
中,load
可能是最好的选择,正如已经提到的评论-(docs)。要从
insert
或update
查询中获取结果,请将execute
替换为get_result
或get_results
以获取多行(这将给予Vec<T>
,而不仅仅是T
)...更多文档。