这企鹅真可爱
本文主要讲解ORACLE数据库的存储过程,如果想学习了解MYSQL数据库的存储过程可参考本篇文章mysql存储过程学习笔记,在网上找过很多ORACLE存储过程的文章,有语法、有练习题类。
都不是很友好吧,所以决定写一篇针对入门的文章,文章结构是参考的一篇mysql存储过程。
文章目录:
一、创建一个简单的存储过程
二、存储过程的变量
三、存储过程参数
四、存储过程条件语句
五、存储过程循环语句
六、存储过程游标的使用
七、8道存储过程——案例实战
八、语法及案例使用数据
备注:数据在文章末尾
什么是存储过程
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
存储过程的特点
1、能完成较复杂的判断和运算
2、可编程行强,灵活
3、SQL编程的代码可重复使用
4、执行的速度相对快一些
5、减少网络之间的数据传输,节省开销
MYSQL和ORACLE存储过程的语法差异还是比较大的,下面我们一起学习ORACLE存储过程的语法吧。
一、创建一个简单的存储过程
1、创建存储过程的简单语法
create procedure 名称 as
begin
.........
end
2、创建一个简单的存储过程
create or replace procedure test1 as
begin
dbms_output.put_line('hello word');
end
3、调用存储过程
call test1()
运行结果如图
二、存储过程的变量
目录
1、先通过一个简单的例子来学习变量的声明和赋值
2、变量分类
2.1、普通变量
2.2、引用变量
2.3、记录型变量
1、先通过一个简单的例子来学习变量的声明和赋值
create or replace procedure select_emp as
--定义变量my_income
my_income varchar(20);
begin
-- 使用select语句给变量赋值,将emp_test 表中worker_no = '200010'的income赋值给变量my_income
select income into my_income from emp_test where worker_no = '200010';
--打印输出变量my_income值
dbms_output.put_line('工资'||my_income);
end;
总结
(1)、在begin程序体前声明变量,变量必须先声明后使用;
(2)、变量具有数据类型和长度,与ORACLE的数据类型保持一致
(3)、变量可以通过select into的方式赋值,也可以通过:=赋值
通过上面的案例,大家对变量有了简单的了解,下面详细介绍一下变量的分类。
2、变量分类
1、普通数据类型(char,varchar2,date,number,boolean,long)
2、特殊变量类型(引用型变量,记录型变量)
引用型变量,变量的数据类型取决表中的数据类型;记录型变量,变量不是接受一个值,是一行值。
声明变量语法:变量名 变量类型(变量长度)
---普通变量 v_name varcar2(20);
---引用型变量 v_income emp_test.income%TYPE;
---记录型变量 v_emp emp_test%ROWTYPE //表示变量v_emp存的是表中emp_test一整行的数据
2.1、普通变量
当我们想使用普通变量的时候,需要先给普通变量命名,制定变量的类型和长度。我们在赋值的时候可以在声明变量的时候直接赋值:=,也可以在程序中复制,通过select语句赋值。
存储过程参数
【示例】打印人员个人信息,包括:工号、工资、部门
create or replace procedure test1 as
//定义变量
my_number varchar2(20); --工号
my_income int := 3000; --声明变量直接赋值
my_depart varchar2(50); --部门
begin
---通过SELECT语句给变量赋值
select '5号部门' into my_depart from dual;
---打印输出
dbms_output.put_line('姓名'||my_number|| '工资'||my_income||'部门'||my_depart);
end ;
变量赋值的方式有两种:
1.直接赋值语句 :=
2.语句复制,使用select……into……赋值:(语法select值into变量)
2.2、引用变量
引用变量变量的类型和长度取决于表中字段的类型和长度,通过表名.列名%TYPE指定变量的类型和长度
例如: v_worker emp_test.worker_no%TYPE
【示例】定义引用变量,打印工号为200010员工的个人信息,包括:工资、部门
--定义引用变量,打印工号为200010员工的个人信息,包括:工资、部门
create or replace procedure test2 as
----一、定义变量
my_income emp_test.income%TYPE;--工资,引用型变量
my_depart emp_test.department%TYPE;--部门,引用型变量
begin
select income,department into my_income,my_depart from emp_test where worker_no='200010';
dbms_output.put_line( '工资'||my_income||'部门'||my_dep