如何在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;
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


