rust 如何从Diesel SQL函数获取返回值

vwoqyblh  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(181)

我有一个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;
lpwwtiir

lpwwtiir1#

这是一个老问题,但我想我会张贴一个回应,以防其他人在这里降落。
当您调用execute时,返回的只是受影响的行数。请参见getting started guide,并搜索"get_result".在一个select中,load可能是最好的选择,正如已经提到的评论-(docs)。
要从insertupdate查询中获取结果,请将execute替换为get_resultget_results以获取多行(这将给予Vec<T>,而不仅仅是T)...更多文档。

相关问题