1 Star 0 Fork 0

飞龙/oracleTeaching

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
test5.sql 1.90 KB
一键复制 编辑 原始数据 按行查看 历史
赵卫东 提交于 2019-09-11 13:53 +08:00 . V1
create or replace PACKAGE MyPack IS
/*
本实验以实验4为基础。
包MyPack中有:
一个函数:Get_SaleAmount(V_DEPARTMENT_ID NUMBER),
一个过程:Get_Employees(V_EMPLOYEE_ID NUMBER)
*/
FUNCTION Get_SaleAmount(V_DEPARTMENT_ID NUMBER) RETURN NUMBER;
PROCEDURE Get_Employees(V_EMPLOYEE_ID NUMBER);
END MyPack;
/
create or replace PACKAGE BODY MyPack IS
FUNCTION Get_SaleAmount(V_DEPARTMENT_ID NUMBER) RETURN NUMBER
AS
N NUMBER(20,2); --注意,订单ORDERS.TRADE_RECEIVABLE的类型是NUMBER(8,2),汇总之后,数据要大得多。
BEGIN
SELECT SUM(O.TRADE_RECEIVABLE) into N FROM ORDERS O,EMPLOYEES E
WHERE O.EMPLOYEE_ID=E.EMPLOYEE_ID AND E.DEPARTMENT_ID =V_DEPARTMENT_ID;
RETURN N;
END;
PROCEDURE GET_EMPLOYEES(V_EMPLOYEE_ID NUMBER)
AS
LEFTSPACE VARCHAR(2000);
begin
--通过LEVEL判断递归的级别
LEFTSPACE:=' ';
--使用游标
for v in
(SELECT LEVEL,EMPLOYEE_ID,NAME,MANAGER_ID FROM employees
START WITH EMPLOYEE_ID = V_EMPLOYEE_ID
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID)
LOOP
DBMS_OUTPUT.PUT_LINE(LPAD(LEFTSPACE,(V.LEVEL-1)*4,' ')||
V.EMPLOYEE_ID||' '||v.NAME);
END LOOP;
END;
END MyPack;
/
/*
测试:
函数Get_SaleAmount()测试方法:
select count(*) from orders;
select MyPack.Get_SaleAmount(11) AS 部门11应收金额,MyPack.Get_SaleAmount(12) AS 部门12应收金额 from dual;
过程Get_Employees()测试代码:
set serveroutput on
DECLARE
V_EMPLOYEE_ID NUMBER;
BEGIN
V_EMPLOYEE_ID := 1;
MYPACK.Get_Employees ( V_EMPLOYEE_ID => V_EMPLOYEE_ID) ;
V_EMPLOYEE_ID := 11;
MYPACK.Get_Employees ( V_EMPLOYEE_ID => V_EMPLOYEE_ID) ;
END;
/
输出:
1 李董事长
11 张总
111 吴经理
112 白经理
12 王总
121 赵经理
122 刘经理
11 张总
111 吴经理
112 白经理
*/
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/feiLg/oracle-teaching.git
git@gitee.com:feiLg/oracle-teaching.git
feiLg
oracle-teaching
oracleTeaching
master

搜索帮助