存储过程知识点

定义

  • 存储一些 事物性操作 (把一个过程存储下来)
  • 不需要返回值任何结果的(没有返回值)
    • 可以返回值(传出参数)
    • 返回多个返回值
  • 参数比较多
    • 传出参数 out
    • 传入参数 in (什么也不加 默认就是 in)
    • 传出传入参数

和存储函数的区别

1、存储函数中有返回值,且必须返回;而存储过程没有返回值,可以通过传出参数返回多个值。

2、存储函数可以在select 语句中直接使用,而存储过程不能。过程多数是在plsql代码中直接使用的。在plsql代码外部使用 call 存储过程名.

3、存储函数一般都是封装一个查询结果,而存储过程一般都封装一段事务代码。

语法

CREATE [ OR REPLACE ]    PROCEDURE     存储过程名称
(参数名 类型, 参数名 类型, 参数名 类型)
IS|AS
变量声明部分;
BEGIN
逻辑部分
[EXCEPTION
异常处理部分]
END;

-- 代码说明
- CREATE PROCEDURE
  - 创建存储过程
- 存储过程名称
  (参数名 类型, 参数名 类型, 参数名 类型)
  - 声明类型不加大小!!!

案例1存储过程(传入参数)

使用存储过程 完成 对t_owners表的数据插入

-- 创建序列id从100开始
create sequence seq_owners start with 100;
-- 创建存储过程 procedure 存储过程名称(参数名,参数类型) 
create or replace procedure pro_owners_add(
V_NAME varchar2,
V_ADDRESSID number,
V_HOUSENUMBER varchar2,
V_WATERMETER varchar2,
V_OWNERTYPEID number)
is
-- 向t_owners插入数据,
begin
    insert into t_owners
	values(seq_owners.nextval,V_NAME,V_ADDRESSID,V_HOUSENUMBER,V_WATERMETER,sysdate,V_OWNERTYPEID);
	-- 提交
    commit;
end;
-- 调用函数
call pro_owners_add('鲁班',2,'北京','88',2);

对t_area表的数据插入(练习简单版)

create sequence seq_area start with 100;
create or replace procedure fn_add(
    v_name varchar2
)
is
begin
    insert into t_area values(seq_area.nextval,v_name);
    commit;
end;
call fn_add('河北');

案例2存储过程(传出参数)

-- 创建存储过程
create or replace procedure pro_owners_add_2(
V_NAME varchar2,
V_ADDRESSID number,
V_HOUSENUMBER varchar2,
V_WATERMETER varchar2,
V_OWNERTYPEID number
-- 输出数据out
v_id out number
)
is
begin
-- 将序列id赋值给v_id
    select seq_owners.nextval into v_id from DUAL;
    -- 向t_owners插入数据
    insert into t_owners
    values(v_id,V_NAME,V_ADDRESSID,V_HOUSENUMBER,V_WATERMETER,sysdate,V_OWNERTYPEID);
    -- 提交数据
    commit;
end;
-- 使用plsql调用函数向表中写入数据并输出
declare
    v_my_id number;
begin
    pro_owners_add_2('鲁班',1,'77','77',1,v_my_id);
    DBMS_OUTPUT.PUT_LINE(v_my_id);
end;

传出t_area表中的地址

create or replace procedure fn_add_2(
    v_name varchar2,
    v_id out number
)
is
begin
    select seq_area.nextval into v_id from DUAL;
    insert into t_area values(v_id,v_name);
    commit;
end;
declare
    v_my_id number;
begin
    fn_add('河南');
    DBMS_OUTPUT.PUT_LINE(v_my_id);
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值