如何在oracle中的存储过程中使用sum()函数?
下面的示例工作正常,它返回一些行.但我需要行的摘要. DECLARE x number; Cursor c1 is select sal,deptno from emp; rw c1%rowtype; BEGIN x:=0; open c1; LOOP fetch c1 into rw; FOR i IN 1..rw.deptno LOOP x:=x+rw.sal; end loop; exit when c1%notfound; DBMS_OUTPUT.PUT_LINE(x); END LOOP; close c1; END; / 假设你有三名员工,每个员工都有不同的薪水.工资有效期为10个月,20个月和30个月.薪水很长一段时间.因此,您希望每月为工资增加2%的奖金额: 以下描述适用于10个月的单个员工: 第1个月工资= 800 => 800 * 2%= 16.00 =>总计= 800 16 = 816 第2个月工资= 816 => 816 * 2%= 16.32 =>总计= 816 16.32 = 832.32 ………………………………………….. …………………….. 第10个月工资= 956.07 => 956.07 *%= 19.12 =>总计= 956.07 19.12 = 975.20 月份-1总薪水= 816.所以第二个月的工资= 816.这将持续10个月.每个员工都有相同的条件.所以我需要总列的摘要.谢谢和最好的问候. 解决方法在查询中使用聚合函数SUM时(与自己添加时不同),不需要转换NULL. SUM处理它.虽然,正如@DavidAldridge指出的那样,如果您希望汇总记录组中的所有行都包含NULL,那么您的总和也将为NULL.如果你想返回一个值,你可以将你的总和包装成如下coalesce(sum(sal),0)这将为您提供所有工资的总和 select SUM(sal) TotalSal from emp; 这将按部门给你SUM select SUM(sal) TotalDeptSal,deptno from emp group by deptno; 在你的问题中,你发布了你需要在存储过程中执行它,而你的代码作为匿名块.如果要从存储过程返回单个值,可以选择使用带有输出参数的返回参数或存储过程声明函数.要从Oracle中的存储过程返回记录集,您需要声明一个refcursor输出参数 CREATE OR REPLACE PROCEDURE Get_TotalSal_ByDept ( p_recordset OUT SYS_REFCURSOR) AS BEGIN OPEN p_recordset FOR select SUM(sal) TotalDeptSal,deptno from emp group by deptno; END; 编辑 我看到你添加了行 – 总数.它与原始问题的关系并没有太大变化.不过,不需要使用游标.您可以运行2个查询并返回2个输出参数,一个包含按部门划分的数据,另一个是总计. CREATE OR REPLACE PROCEDURE Get_SalByDept_WithTotal ( p_total OUT NUMBER,p_recordset OUT SYS_REFCURSOR) AS BEGIN select SUM(sal) INTO p_total from emp; OPEN p_recordset FOR select SUM(sal) TotalDeptSal,deptno from emp group by deptno; END; (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |