将单个值返回函数以进行计算准备(SQL/PLSQL)

将单个值返回函数以进行计算准备(SQL/PLSQL),sql,function,plsql,Sql,Function,Plsql,我有一个特殊的功能有问题。我试图做的是使用此函数检索一个值,以便为另一个将执行我所需计算的函数做好准备。涉及的表格有:客户(客户id主键)和订单(订单号主键)。我需要从客户那里提取“钱包”值,并将该值用于订单中的“钱包”列 CREATE OR REPLACE FUNCTION get_wallet_bal(f_id IN NUMBER) RETURN NUMBER IS wallet_bal NUMBER(5,2); BEGIN SELECT wallet

我有一个特殊的功能有问题。我试图做的是使用此函数检索一个值,以便为另一个将执行我所需计算的函数做好准备。涉及的表格有:客户(客户id主键)和订单(订单号主键)。我需要从客户那里提取“钱包”值,并将该值用于订单中的“钱包”列

CREATE OR REPLACE FUNCTION get_wallet_bal(f_id IN NUMBER)
    RETURN NUMBER 
    IS wallet_bal NUMBER(5,2);

BEGIN
    SELECT wallet 
    INTO wallet_bal
    FROM customers
    WHERE f_id = customer_id;
    RETURN (wallet_bal);
END;
/

上面的My函数检索我要查找的值,但它不是将其返回到一行,而是将其返回到所有“wallet\u bal”行。

您的函数将只返回一个标量值(或引发异常),即由f\u id指定的客户钱包

在您的示例中:

SELECT get_wallet_bal(5) FROM customers
您正在为id为5的客户请求钱包,但在查询客户表时,您经常会得到与客户表中有行相同的结果。当然,这个值总是相同的,因此使用DISTINCT,结果集将减少到一行

例如,试试看

SELECT get_wallet_bal(5) FROM DUAL;
如果您需要为客户5准备钱包

或许您可以尝试以下方法来帮助理解这一问题:

SELECT customer_id, get_wallet_bal(customer_id) FROM customers

这将为所有客户提供钱包。

您是否尝试过选择distinct或select max?很好的建议,我已经尝试了这两种方法,但这不会改变我的输出。您如何准确调用该函数?函数调用如下所示:选择get_wallet_bal(5)FROM customers;编辑:我刚刚意识到我的错误,谢谢你,丹尼尔。在函数调用中使用Distinct可以得到我想要的结果。我明白了,你总是被一些小事吸引。我知道我的查询存在逻辑错误,但无法完全理解为什么会返回这样的结果。你的解释清楚了我为什么收到那个输出。谢谢你的帮助!不客气。请您将此标记为已回答,以便我们都能关注开放性问题?提前谢谢。