oracle的过程、函数、包头和包体详解零基础

44 篇文章 0 订阅
15 篇文章 0 订阅

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;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吕努力变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值