【发布时间】:2022-01-24 18:53:22
【问题描述】:
不知道如何让mysql显示存储过程结果。调用过程时不能使用 table_name.column_name。所以程序不知道它应该调用架构中的哪个表?
试图在一个名为 package 的表中取一个名为 cateringID 的数字列的平均值。此表有几行 NULL 值。需要将此作为一个程序。在程序中,首先将餐饮ID 字段中的所有NULL 值转换为0.0 的数值。然后在程序中取该字段的结果平均值。然后尝试调用该程序。但是在尝试提取存储过程中的食堂ID字段的平均值时,得到NULL的值?
DELIMITER //
CREATE PROCEDURE average_numeric_nulls(IN pPackageID INT, IN pCateringID DEC)
BEGIN
DECLARE pCateringID DECIMAL(5,4);
DECLARE catID DECIMAL(5,4);
SELECT IF(pCateringID IS NULL, 0.0000, FORMAT(pCateringID, 4))
INTO catID
FROM package
WHERE packageID = pPackageID;
SELECT(AVG(catID)) AS 'Replaced NULLS' FROM package;
END//
DELIMITER ;
CALL average_numeric_nulls(@packageID, @cateringID);
pPackageID 和 pCateringID 参数表示现有包裹表中的前两个字段。即。
pPackageID = packageID 包表中的PK。 packageID 是一个数字整数
pCateringID = cateringID 包装表中的FK。餐饮ID 是数字整数和NULL 的混合。需要取该列的平均值,但必须先将 NULL 替换为 0.0。
所以程序应该从包表中读取 packageID 的值,将此 packageID 值传递给程序中的 pPackageID 变量,然后将所有 pCateringID 值(如果它们是 NULL 值)替换为值 0.0000。因此,可以取包装表中生成的 cateringID 列的平均值。
示例包表
packageID cateringID packageName
001 空A
002 空B
003 001 C
004 002 D
005 003 E
结果输出:
替换为 NULLS
空
【问题讨论】:
-
该过程应该从包表中读取 packageID 的值,将此 packageID 值传递给过程中的 pPackageID 变量,然后将所有 pCateringID 值(如果它们为 NULL)替换为该值0.0000。因此可以取包装表中结果 cateringID 列的平均值。 不,您的 SP 绝对是另一个动作。它根据表中提供的 pPackageID 存在格式化 pCateringID 参数,然后显示它。
标签: mysql stored-procedures mysql-workbench