1,写函数和过程,输入三角形三个表的长度。在控制台打印三角形的面积

-- 创建包
create or replace package pac_area is -- 定义计算三角形面积的过程
procedure pro_area (v_side_first number,v_side_second number,v_side_third number);
-- 定义获取三角形面积的函数
function fun_area return number; end; -- 创建包体
create or replace package body pac_area is -- 把三角形面积定义成包体的成员变量
v_area number(10,2);
-- 调用包中的过程
procedure pro_area (v_side_first number,v_side_second number,v_side_third number) is
v_p number(10,2);
begin
v_p:=(v_side_first+v_side_second+v_side_third)/2;
v_area:=sqrt(v_p*(v_p-v_side_first)*(v_p-v_side_second)*(v_p-v_side_third));
dbms_output.put_line('三角形的面积为:'||v_area);
end;
--调用包中的函数
function fun_area return number is
begin
return v_area;
end; end; -- 通过匿名块调用包中的过程和函数
declare
-- 声明变量 调用函数时使用
v_area number(10,2);
begin
-- 调用包中的过程
pac_area.pro_area (3,v_side_third=>5,v_side_second=>4);
-- 调用包中的函数
v_area:=pac_area.fun_area ();
dbms_output.put_line('调用函数面积:'||v_area); end;

2,写一个过程,输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

-- 创建存储过程    输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)
create or replace procedure pro_dept (v_deptno number,v_dname out varchar2,v_total out number,v_avg out number) is begin
select d.dname,count(e.ename),avg(sal+nvl(comm,0)) into v_dname,v_total,v_avg from emp e inner join dept d on e.deptno=d.deptno where e.deptno=v_deptno group by d.dname; end; -- 通过匿名块调用存储过程
declare
-- 声明变量 接收出参
v_dname dept.dname%type;
v_total number(30);
v_avg number(30,2);
begin
--调用过程
pro_dept (10,v_dname,v_total,v_avg);
dbms_output.put_line('部门名称:'||v_dname||',总人数:'||v_total||',平均工资:'||v_avg);
end;

3,编写一个存储过程,输入一个员工编号,输出该员工的员工编号,员工姓名,部门名称

-- 创建存储过程
create or replace procedure pro_emp (v_empno number,v_empno1 out number,v_ename out varchar2,v_dname out varchar2)
is
begin
select e.empno,e.ename,d.dname into v_empno1,v_ename,v_dname from emp e inner join dept d on e.deptno=d.deptno where e.empno=v_empno; end; -- 通过匿名块调用存储过程
declare -- 声明变量,接收出参
v_empno1 emp.empno%type;
v_ename emp.ename%type;
v_dname dept.dname%type; begin
-- 调用过程
pro_emp (7499,v_empno1,v_ename,v_dname);
dbms_output.put_line('员工编号:'||v_empno1||',员工姓名:'||v_ename||',部门名称:'||v_dname); end;

4,编写一个存储过程,输出所有员工及其部门领导的姓名、员工号及部门号

-- 创建存储过程
create or replace procedure pro_emp1
is
-- 声明record类型
type emp_record_type is record(
-- 声明record类型中的变量
v_ename emp.ename%type,
v_mname emp.ename%type,
v_empno emp.empno%type,
v_deptno emp.deptno%type
);
-- 声明table类型
type emp_table_type is table of emp_record_type
-- 指定下标的增长方式为整数 每次增长1
index by binary_integer;
-- 声明table类型的变量
v_emp emp_table_type;
begin
-- 查询所有要打印的数据
select ename,nvl((select e2.ename from emp e2 where e1.mgr=e2.empno),'无'),empno,deptno bulk collect into v_emp from emp e1;
--循环 控制台打印输出结果
for v_i in 1..v_emp.count
loop
dbms_output.put_line('员工姓名:'||v_emp(v_i).v_ename||'领导姓名:'||v_emp(v_i).v_mname||'员工编号:'||v_emp(v_i).v_empno||'部门编号:'||v_emp(v_i).v_deptno);
end loop;
end; -- 通过call调用存储过程
call pro_emp1();

Oracle PL/SQL 存储过程、函数、包 的范例的更多相关文章

  1. 二十三、oracle pl/sql分类三 包

    包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成.1).我们可以使用create package命令来创建包,如:i.创建一个包sp_packageii.声明该包有一个过程update_sal ...

  2. oracle pl/sql split函数

    在软件开发过程中程序员经常会遇到字符串的拼接和拆分工作. 以java开发为例: 前台传入字符串拼接形式的一个JSON数据,如:"1001,1002,1003",这可能代表了一组序号 ...

  3. 关于oracle PL/SQL存储过程 PLS-00905 object is invalid,statement ignored问题的解决

    昨天在学习oracle存储过程的时候,写了一个存储过程的demo,语句是这样的: )) AS psssal TESTDELETE.TESTID%TYPE; BEGIN SELECT TESTID IN ...

  4. oracle pl/sql 存储过程

    存储过程用于执行特定的操作,当建立存储过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分:通过使用输出参数,可以将执行部分的数据传递到 ...

  5. Oracle PL/SQL编程之包(packages)

    1.简介 包用于在逻辑上组合过程和函数,它由包规范和包体组成. 我们可以使用create package来创建包,代码如下: ok,包创建完成,通过包的代码发现包的功能就是申明包中包含的过程和方法,红 ...

  6. Oracle PL/SQL语言函数、匿名语句及循环

    一.自定义函数 格式: create or replace function 函数名(参数名 参数类型...) return  返回值类型 as xx vachar2(20)              ...

  7. Oracle数据库之开发PL/SQL子程序和包

    Oracle数据库之开发PL/SQL子程序和包   PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...

  8. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  9. ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)

    原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!)   继上篇:ORACLE P ...

随机推荐

  1. 浅谈CSS中的百分比

    结论: 标准流中的元素,看其属性有没有继承性.对于width和margin-left,它是可以继承的,它会参照父元素或者祖先元素(其实是包含块):对于height,它没有继承性,父元素或者祖先元素会自 ...

  2. 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件

    原 解决使用intellij idea开发MAVEN项目在target目录下不存在mapper.xml文件 原文章链接:https://blog.csdn.net/beauxie/article/de ...

  3. foy: 轻量级的基于 nodejs 的通用 build 工具

    npm 的 scripts 下写的命令太多就很容易很乱,各种第三方轮子都只能解决一部分问题,总感觉不是很好用,想找个类似 make 的工具只能找到 jake, 可是 jake 的 API 太老,居然很 ...

  4. js 获取data-属性值

    ].getAttribute('data-price'); 注意 document.getElementsByClassName('1pc_price')后面有[0],不然会报错.

  5. 精通CSS高级Web标准解决方案(1-3 规划、组织与维护样式表)

    对文档应用样式 对代码进行注释/*......*/ 结构性注释 自我提示 删除注释.优化样式表 样式指南:解释代码与站点的视觉设计是如何组织在一起的 站点结构.文件结构.命名规则 编码标准:(X)ht ...

  6. Verlet Integration

        Verlet Integration Verlet 积分法是一种用于求解牛顿运动方程的数值方法,被广泛运用于动力学模拟以及视频游戏中.尔莱算法的优点在于:数值稳定性比简单的欧拉方法高很多,并保 ...

  7. [python][oldboy]关键字参数和位置参数,默认参数,可变长参数(无名,有名)

    关键字参数和位置参数是在函数调用的时候定义 关键字参数是以键-值对出现,无序,多一个不行,少一个不行 位置参数,有序,多一个不行,少一个不行 混搭:所有位置参数必须在关键字参数的左边 默认参数是在函数 ...

  8. Thanks for your encourage!

    将近三个月的学习,我的努力换回了代表荣誉的小黄衫,这令我很开心啊...我想是不是要写点什么来表达自己的心情呢=,=  于是就有了以下文字ahhhhhh... 学习心得: (1)学习中总会有失败和成功, ...

  9. 常见shell脚本命令整理

    1.cat /dev/null > test.txt txt的文件内容被清空. 2.ls | xargs rm 目录中大量文件的删除 3.查看文件夹下文件个数 ls | wc -w 查看有多少个 ...

  10. iOS学习笔记33-UICollectionView入门

    一.UICollectionView介绍 UICollectionView和UICollectionViewController类是iOS6新引进的API,用于展示集合视图,布局更加灵活,可实现多列布 ...