zoukankan      html  css  js  c++  java
  • oracle学习笔记(二十一) 程序包

    程序包

    之前我们调用的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;
    /
    
  • 相关阅读:
    mybatis中mysql转义讲解
    mybatis结合mysql批量操作及查询sql
    转载:避免重复插入,更新的sql
    maven下载jar包下载不下来的解决方法
    catalina.home与 catalina.base区别
    ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql
    普通索引的建立及普通索引的排序
    复合索引的优点和注意事项
    com.mysql.jdbc.PacketTooBigException,及mysql 设置 max_allow_packet
    ./和../和/三种路径的区别
  • 原文地址:https://www.cnblogs.com/stars-one/p/10970018.html
Copyright © 2011-2022 走看看