Oracle PL/SQL 存储过程、函数、包 的范例
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 存储过程、函数、包 的范例的更多相关文章
- 二十三、oracle pl/sql分类三 包
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成.1).我们可以使用create package命令来创建包,如:i.创建一个包sp_packageii.声明该包有一个过程update_sal ...
- oracle pl/sql split函数
在软件开发过程中程序员经常会遇到字符串的拼接和拆分工作. 以java开发为例: 前台传入字符串拼接形式的一个JSON数据,如:"1001,1002,1003",这可能代表了一组序号 ...
- 关于oracle PL/SQL存储过程 PLS-00905 object is invalid,statement ignored问题的解决
昨天在学习oracle存储过程的时候,写了一个存储过程的demo,语句是这样的: )) AS psssal TESTDELETE.TESTID%TYPE; BEGIN SELECT TESTID IN ...
- oracle pl/sql 存储过程
存储过程用于执行特定的操作,当建立存储过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分:通过使用输出参数,可以将执行部分的数据传递到 ...
- Oracle PL/SQL编程之包(packages)
1.简介 包用于在逻辑上组合过程和函数,它由包规范和包体组成. 我们可以使用create package来创建包,代码如下: ok,包创建完成,通过包的代码发现包的功能就是申明包中包含的过程和方法,红 ...
- Oracle PL/SQL语言函数、匿名语句及循环
一.自定义函数 格式: create or replace function 函数名(参数名 参数类型...) return 返回值类型 as xx vachar2(20) ...
- Oracle数据库之开发PL/SQL子程序和包
Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...
- [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)
原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...
- ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)
原文:ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) ORACLE PL/SQL编程之六: 把过程与函数说透(穷追猛打,把根儿都拔起!) 继上篇:ORACLE P ...
随机推荐
- Python学习day01
age = 23 count=0 while count<3: guess_age = int (input("My age:")) if age ==guess_age: ...
- LeetCode(189) Rotate Array
题目 Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the arr ...
- 通过IAR工程文件查看对应IAR版本号
IAR使用技巧——如何使用合适的版本打开IAR工程 2014年07月05日 23:49:08 xukai871105 阅读数:12895 标签: IAR 更多 个人分类: 嵌入式ARM 0.前言 ...
- 思维水题:UVa512-Spreadsheet Tracking
Spreadsheet Tracking Data in spreadsheets are stored in cells, which are organized in rows (r) and c ...
- hdu 5459
Problem Description I've sent Fang Fang around 201314 text messages in almost 5 years. Why can't she ...
- debian 升级glibc
原因 wheezy是2.13,编译android4.4 需要2.14的,报错如下: rebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8-linar ...
- HBase0.94.2-cdh4.2.0需求评估测试报告1.0之三
1.1.1 测试记录 第一组:一个列,一个分区,顺序ID 测试列和分区 测试程序或命令 导入文件大小(Mb) 导入文件个数(个) 是否触发flush事件(布尔) 是否触发compact事件(布尔) 触 ...
- <node>……express的中间件……//
Express是一个基于Node.js平台的web应用开发框架,在Node.js基础之上扩展了web应用开发所需要的基础功能,从而使得我们开发Web应用更加方便.更加快捷. 中间件是什么? 中间件函数 ...
- Python虚拟机函数机制之扩展位置参数和扩展键参数(六)
扩展位置参数和扩展键参数 在Python虚拟机函数机制之参数类别(三)的例3和例4中,我们看到了使用扩展位置参数和扩展键参数时指示参数个数的变量的值.在那里,我们发现在函数内部没有使用局部变量时,co ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it
链接:https://www.nowcoder.com/acm/contest/163/F 来源:牛客网 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it 时间限制:C ...