加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

如安在oracle中的存储进程中行使sum()函数?

发布时间:2021-01-18 18:56:18 所属栏目:站长百科 来源:网络整理
导读:下面的示例事变正常,它返回一些行.但我必要行的择要. 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;

(编辑:湖南网)

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

    热点阅读