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. matplotlib学习记录 二

    # 绘制10点到12点的每一分钟气温变化折线图 import random from matplotlib import pyplot as plt # 让matplotlib能够显示中文 plt.r ...

  2. Python 基本数据类型 (二) - 字符串1

    # ----------- 首字母大写 ---------- test = "alex is a man" v = test.capitalize() print(v): Alex ...

  3. 如何用ADMINISTRATOR登陆WIN7

    Windows 7系统出于安全考虑,将系统超级管理员帐户(Administrator)隐藏了,不允许"普通用户"使用.很多时候特别是安装一些应用软件时,由于兼容的问题,普通权限的用 ...

  4. 重新造轮子之静态链接1(Static linking)

    最近学习计算机病毒学的过程中,又讲到了静态链接的问题,联想到了之前保健哥在信息安全的课堂上向我们展示了一个没有main()函数的C程序到底应该如何编写.个人觉得这个小实验对于加深静态链接的过程的理解也 ...

  5. CSS动画小结

    CSS动画 原理:1.画面之间变化  2.视觉暂留作用 常见问题 1.CSS 动画的实现方式有几种 1.transition  2. keyframes(animation) 2.过渡动画和关键帧动画 ...

  6. action属性和data属性组合事例

  7. Python 基础(一)

    本章内容 1.编译和解释型语言的区别 2.Python的解释器 3.pyc文件 4.运行环境 5.变量 6.数据类型 7.字符编码 8.三元运算 编译和解释型语言的区别 编译器是把源程序的每一条语句都 ...

  8. FFT、NTT学习笔记

    参考资料 picks miskcoo menci 胡小兔 unname 自为风月马前卒 上面是FFT的,学完了就来看NTT吧 原根 例题:luogu3803 fft优化后模板 #include < ...

  9. mongodb的基本操作数据更新

    先启动服务器 查看数据库 选择数据库 删除数据库 插入信息 查看插入的表名 查看信息 修改表数据 修改指定信息,其他信息不改变 可以使不存在的命令进行修改并保存 修改多条数据 删除数据 删除表 查看集 ...

  10. EM算法简易推导

    EM算法推导 网上和书上有关于EM算法的推导,都比较复杂,不便于记忆,这里给出一个更加简短的推导,用于备忘. 在不包含隐变量的情况下,我们求最大似然的时候只需要进行求导使导函数等于0,求出参数即可.但 ...