我希望能够使用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)
表:morder
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
答案 0 :(得分:0)
您需要测试从基本到复杂的代码。每次添加一件事,直到发现问题。
从此基本功能开始。我可以返回值,这样函数结构就可以了。问题是查询
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演示中,我们可以更深入地了解问题所在。