1.什么叫过程
- 将sql或者PL/SQL代码块集中用于完后特定功能的集合
- 过程的结构
- 声明部分:包括类型、变量、游标
- 执行部分:完成功能而编写的sql语句或者是PL/SQL代码块
- 异常处理部分
2.过程实例
准备工作
--创建一个表用于测试
create table player(
id int primary key,
name varchar(20) not null,
sex varchar(20)
);
--插入几条数据
insert into player(id,name,sex) values('1','lucy','女');
insert into player(id,name,sex) values('2','hah','男');
insert into player(id,name,sex) values('3','dack','男');
insert into player(id,name,sex) values('4','rose','女');
insert into player(id,name,sex) values('5','luck','女');
–创建第一个过程
--创建第一个过程
--or replace表示没有同名的过程就是创建,有便是覆盖
create or replace procedure proc_player_search(
--默认为v_sex in varchar(in代表输入参数,out代表输出参数)
v_sex varchar
)as
--声明部分
cursor cur_player is select * from player where sex=v_sex;
begin
for c_player in cur_player loop
dbms_output.put_line('id:'||c_player.id||'name:'||c_player.name||'sex:'||c_player.sex);
end loop;
end;
调用过程
--调用过程
begin
proc_player_search('男');
end;
创建带输出参数的存储过程
--创建带输出参数的存储过程
CREATE OR REPLACE PROCEDURE PROC_PLAYER_INSERT
(
--输入参数
V_ID IN INT
, V_NAME IN "VARCHAR"
, V_SEX IN "VARCHAR"
, v_result out number
) AS
BEGIN
v_result:=0;
insert into player values(v_id,v_name,v_sex);
--提交
commit;
--没报错就返回1
v_result:=1;
exception
when others then
--报错就返回0
v_result:=0;
END PROC_PLAYER_INSERT;
带 in out输入输出参数的存储过程
不再示例(不推荐)
3.函数
- 创建函数
创建函数
create or replace function fun_getplayercount(
v_sex varchar
)
--规定返回值类型
return number
as
--规定返回的参数 declare
f_count number;
begin
--把查询的值赋给返回的参数
select count(id) into f_count from player where sex=v_sex;
--把返回的参数返回
return f_count;
end;
- 执行函数
--执行函数
select fun_getplayercount('女') from dual;
4.总结过程和函数的区别
- – 过程 函数
1.表示符的区别 procedure function
2.返回值的区别 必须使用变量形参 用函数名直接返回
3.赋值 不能赋值并定义类型 可以定义类型,并直接赋值
4.调用方式 独立的过程调用句 以表达式方法调用
5.目的 完成一系列的数据处理 获得函数返回值
5.包头
- 创建包头
--创建包头
create or replace package pck_player
as
--过程
--查询某个性别的玩家个数
procedure prop_player_search(v_sex in varchar,v_count out number);
--根据玩家的id查询玩家的姓名
procedure prop_player_search2(v_id in int,v_name out varchar);
--函数
--根据玩家姓名查询员工性别
function fun_player_search(v_name varchar) return varchar;
end pck_player;
6.包体
- 创建包体
--创建包体
create or replace package body pck_player is
--过程
--查询某个性别的玩家个数
procedure prop_player_search(v_sex in varchar,v_count out number)
as
begin
select count(id) into v_count from player where sex=v_sex;
end;
--根据玩家的id查询玩家的姓名
procedure prop_player_search2(v_id in int,v_name out varchar)
as
begin
select name into v_name from player where id=v_id;
end;
--函数
--根据玩家姓名查询员工性别
function fun_player_search(v_name varchar) return varchar
is
f_sex varchar(30);
begin
select sex into f_sex from player where name=v_name;
return f_sex;
end;
end pck_player;
- 测试包
--测试函数(根据姓名查询性别)
select pck_player.fun_player_search('rose') from dual;
--测试过程
--根据性别查询该性别的人数
declare
--定义一个参数接收过程的输出参数的值
f_count number;
begin
pck_player.prop_player_search('女',f_count);
DBMS_OUTPUT.put_line(f_count);
end;
--根据id查询姓名
declare
--定义一个参数接收过程的输出参数的值
f_name varchar(50);
begin
pck_player.prop_player_search2(2,f_name);
DBMS_OUTPUT.put_line(f_name);
end;