韩顺平玩转oracle之pl/sql听课笔记《三》
来源:互联网 发布:吉克隽逸 知乎 编辑:程序博客网 时间:2024/05/01 22:16
有些惭愧,距离第2次听课笔记远了。这一讲主要是关于函数,包,还有变量的解释。
1 函数和过程的区别
1)函数:返回特定值,通常是一个;
过程:执行特定操作
2)建立函数时:
在函数头须包含return子句
例如;
return number is
think_salary number(7,2)
在函数体也须包含return语句
return think_salary
2 案例:输入雇员的姓名,返回该雇员的年薪
create function sp_think(spName varchar2)
return number is
yearSal number(7,2);
begin
select sal*12+nvl(comm,0)*12 into yearSal from emp where ename=spName;
return yearSal;
end;
/
在sqlplus中调用:
var think number
call sp_think('SCOTT') into:think
print think
3 包
用于逻辑上组合过程和函数,由包头和包体组成,其中
包头:对过程或函数的声明
包体:实现包头中所声明的过程或函数
案例:
包头:
create package sp_think
is
procedure update_sal(name varchar2,newsal number);
function annual_income(name varchar2) return number;
end;
/
包体:
create package body sp_think is
procedure update_sal(name varchar2,newsal number)
is
begin
update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2)
return number is
annual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary from emp where ename=name;
return annual_salary;
end;
end;
/
4 如何调用包的过程或函数
调用自己创建的包时:
call sp_think.update_sal('SCOTT',1500);
调用其他方案的包时,如hr:
call hr.sp_think.update_sal('SCOTT',1500);
5 触发器
触发器是自动执行的过程
包含:
1)触发的事件:如DML语句
2)触发的操作:pl/sql块
作用:维护数据库的安全和一致性
6 变量
1)v_ename varchar2(10) -- :=为赋值号,如v_sal number(6,2):=5.8
2)用于存放多值的变量:
2.1) pl/sql记录:同c语言的结构体相似
案例:
declare
type think is record(name emp.ename%type,salary emp.sal%type)--name随ename的变而变
re_think think
begin
select ename,sal into think from emp where empno7788;
dbms_output.put_line('员工名:'||think.name);
end;
2.2)pl/sql表:同c语言的数组相似
案例:
declare
type think is table of emp.ename%type index by binary_integer;
-- 定义了一个pl/sql表类型,存放emp.ename%type,下标是正整数
ta_think think;
....
3) 游标变量:结果集的指针
案例:定义一个pl/sql块,可以输入部门号,显示该部门所有员工的姓名和工资
declare
type think_cursor is ref cursor;
water_cursor think_cursor;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open water_cursor for select ename,sal from emp where deptno=&a;
loop
fetch water_cursor into v_ename,v_sal;
exit when water_cursor%notfound;
dbms_output.put_line('名字:'||v_ename||'工资:'||v_sal)
end loop
end;
- 韩顺平玩转oracle之pl/sql听课笔记《三》
- 韩顺平玩转oracle之pl/sql听课笔记 《一》
- 韩顺平玩转oracle之pl/sql听课笔记《二》
- 韩顺平玩转oracle的笔记
- 看《韩顺平玩转oracle》学oracle,笔记
- Oracle学习笔记1(韩顺平玩转oracle)
- oracle学习笔记2(韩顺平玩转oracle)
- 韩顺平Linux讲解听课笔记
- 玩转Oracle-PL/SQL异常学习笔记
- 韩顺平oracle视频笔记三
- oracle学习笔记之三(函数:Pl/sql)
- 韩顺平Oracle笔记
- ORACLE PL/SQL 集合学习笔记(三)
- 初学Oracle PL/SQL 【笔记三】
- Oracle PL/SQL 学习笔记(三)
- Oracle学习笔记(三)PL/SQL
- Oracle之SQL、PL/SQL学习笔记
- Oracle之SQL、PL/SQL学习笔记
- spring ApplicationContext#getBean 方法
- MFC之Ribbon
- MFC之Dialog
- Math ceil(),floor(),round()方法的使用
- 如何实现类的成员函数作为回调函数
- 韩顺平玩转oracle之pl/sql听课笔记《三》
- Android软件开发之PreferenceActivity中的组件
- 博客技巧
- quake3源码大致结构
- Hibernate工作流程
- 磁盘移臂调度算法 简介
- 实现从左边滑动出来的抽屉
- PHP网络爬虫--新闻抓取
- openVPN Windows下安装使用简明说明