加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 百科 > 正文

如何在oracle中的存储过程中使用sum()函数?

发布时间:2021-01-17 13:49:19 所属栏目:百科 来源:网络整理
导读:下面的示例工作正常,它返回一些行.但我需要行的摘要. 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

下面的示例工作正常,它返回一些行.但我需要行的摘要.

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;

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读