ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

oracle学习笔记(二十一) 程序包

2019-09-19 14:58:35  阅读:235  来源: 互联网

标签:dbms sal 程序包 sum 二十一 number oracle my


程序包

之前我们调用的dbms_output.put_line(''),dbms_output就是一个程序包

程序包创建语法

1. 声明程序包

--声明程序包中的过程,函数,自定义的类型
--程序包里面的过程和函数不需要使用create or repalce
create or replace package dbms_my
is
    record类型等。
    procedure $procedure_name$ [(参数...)];
    function $function_name$ [(参数...)]
    ......
end dbms_my;

2. 实现程序包

create or replace package body dbms_my
is
    procedure <过程名>
    is
    ......
end dbms_my;

程序包例子

--创建程序包
create or replace package dbms_my
is
    --相当于自定义一个类
    TYPE type_my_rec is record(
        empno number,
        ename varchar2(10),
        sal number
    );
    procedure sum_sal(deptno department.deptno%type,sum in out number); 
    function avg_sal(deptno department.deptno%type) return  number;
end dbms_my;

--实现程序包
create or replace package body dbms_my
is
    procedure sum_sal(p_deptno department.deptno%type,sum in out number)
    is 
        sum number;
    begin
        select sum(sal) into sum from employee where deptno=p_deptno;
    end sum_sal;
    
    function avg_sal(deptno department.deptno%type) return  number
    is
        result number;
    begin
        select avg(sal) into result from employee where deptno=p_deptno;
        return result;
    end avg_sal;
end dbms_my;    

--测试程序包
declare
    --使程序包中定义的记录类型来声明变量
    emp_rec dbms_my.type_my_rec;
    v_deptno number default 7879;
    sum_sal number;
    avg_sal number;
    x varchar2(100) := 'default value';
begin
    emp_rec.empno := 7879;--给类中的某个属性赋值
    sum_sal := dbms_my.sum_sal(deptno);--调用过程
    dbms_output.put_line(sum_sal);--输出结果
    select dbms_my.avg_sal(7879) into avg_sal from dual;--调用函数
    dbms_output.put_line(avg_sal);--输出结果
end;
/

标签:dbms,sal,程序包,sum,二十一,number,oracle,my
来源: https://www.cnblogs.com/chaoyang123/p/11549617.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有