mysql选择自定义函数

jucafojl  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(384)

我想能够选择记录使用自定义功能在mysql。
我尝试了以下代码,但在有数据的地方得到了空结果:

SELECT id, getAmountS(id) FROM product WHERE id=2

DELIMITER $$
CREATE FUNCTION getAmountS(pid INT(11)) RETURNS DOUBLE(12, 2) DETERMINISTIC BEGIN
    DECLARE sellvalue DOUBLE(12, 2) ;
    SELECT
        SUM( CASE WHEN s.invoicestatus = 'Active' THEN ROUND(
        (r.rate * 1 -((r.rate * 1) * r.discount / 100))+((
        r.rate * 1 -( (r.rate * 1) * r.discount / 100)) * r.gstrate / 100),
                2  ) ELSE 0 END) INTO sellvalue FROM  morder r
        LEFT JOIN sale s ON  r.saleid = s.id
        WHERE r.productid = pid;
    RETURN sellvalue;
END $$

请帮忙。
表:产品

id(INT), productname(VARCHAR), manufacturer(INT)

表:莫德

id(INT), saleid(INT), gstrate(INT), rate(DOUBLE), productid(INT), discount(DOUBLE)

表:销售

id(INT), invoiceno(VARCHAR), invoicestatus(ENUM), invoiceDate(DATE)

以下语句可以正常工作:

SELECT SUM( CASE WHEN s.invoicestatus = 'Active' THEN ROUND(
        (r.rate * 1 -((r.rate * 1) * r.discount / 100))+((
        r.rate * 1 -( (r.rate * 1) * r.discount / 100)) * r.gstrate / 100), 2  ) ELSE 0 END) sellvalue FROM  morder r
        LEFT JOIN sale s ON  r.saleid = s.id
        WHERE r.productid = 30340
jqjz2hbq

jqjz2hbq1#

你需要测试你的代码从基本到复杂。每次添加一个内容,直到找到问题为止。
从这个基本功能开始。我可以返回值,这样函数结构就可以了。问题是查询
sql演示

CREATE FUNCTION getAmountS(pid INT(11)) RETURNS DOUBLE(12, 2) DETERMINISTIC BEGIN
    DECLARE sellvalue DOUBLE(12, 2) ;
    SELECT 2*pid INTO sellvalue FROM  Table1
    WHERE id = pid;
    RETURN sellvalue;
END;

如果您将自己的数据添加到rextexter演示中,我们可以更深入地了解问题所在。

相关问题