SQL存储

一、SQL 存储过程概述

  • 存储过程和函数是存储在服务器端的、可以有输入及输出参数的、用来执行某个功能的 SQL命名块、是数据库中的对象,SQL 命名块可以被客户端应用程序多次调用,它具有模块化、可重用、易扩展、易维护的特点。
  • 存储过程经编译创建并保存在数据库中,用户可通过指定存储过程的名字和给定参数来调用执行。存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。

也许:存储过程也可以看作是一个"加工厂",它接收"原料"(in参数)然后将这些原料加工处理成"产品"(out/inout参数),再把"产品"交付给"调用者"。

🌐SQL数据存储与函数之间的差别/关系:

  1. 存储过程的用户在数据库中完成特定的操作或者任务(例如插入、删除等),而函数则用于返回特定的数据
  2. 存储过程的声明使用procedure关键字,而函数的声明则使用function关键字;
  3. 存储过程不需要返回类型,而函数则必须要返回类型;
  4. 存储过程可以作为独立的PL-SQL执行,而函数则不能作为独立的PL-SQL执行,必须作为表达式的一部分;
  5. 存储过程只能通过out和in/out来返回值,而函数除了可以使用out和in/out以外,还可以使用return来返回值,而且函数中必须要有return子句;
  6. SQL语句(DML或者SELECT)中不可用调用存储过程,而函数可以;
  7. 执行方式略有不同,存储过程的执行方式有两种(使用execute,使用begin和end),函数除了存储过程的两种方式外,还可以作为表达式使用(例如放在select中)。
    🐾使用场合:
    (1)如果需要多个返回值或者不返回值,则使用存储过程;如果只需要返回一个值,就使用函数;
    (2)存储过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值;
    (3)可以在SQL内部调用函数来完成复杂的计算问题,但不能调用存储过程。
    故:如果只有一个返回值,则使用函数;否则,使用存储过程。

二、创建存储过程 create procedure

语法:

创建:
        create procedure 存储过程名称(
        in 参数名称1 参数数据类型,
        out 参数名称2 参数数据类型,
        inout 参数名称3 参数数据类型
        )
        begin
            ————SQL语句
        end;
调用
		call 存储过程名称(参数1,@参数名称2) # in和out
		
		set @参数名称2 = X;
		call 存储过程名称(@参数名称2);		#inout
		select @参数名称2;
查看
		show create procedure 存储过程名称;
删除
		drop procedure if exists 存储过程名称; 

1、in out inout 具体详解

类型含义
in作为输入,调用时需要传入值
out作为输出,该参数作为返回值
inout既可以输入参数,也可以输出参数

2、案例

(1)in:

-- 创建一个存储过程,参数为in
create procedure test(in i int)
begin
	select i; -- 返回结果i,i=1
	set i=2;
	select i; -- 返回结果i,i=2
end

-- 调用存储过程test,并传入一个参数i=1
set @i = 1; -- 定义全局变量i
call test(@i);
select @i; -- 返回结果i,i=1

-- 由以上代码可知当存储过程的参数为in时,会传入变量的值,并且存储过程内部的赋值不会影响到外部传入的变量

(2)out:

-- 创建一个存储过程,参数为out
create procedure test(out i int)
begin
	select i; -- 返回结果i,i=Null
	set i=2;
	select i; -- 返回结果i,i=2
end

-- 调用存储过程test,并传入一个参数i=1
set @i=1; -- 定义全局变量i
call test(@i);
select @i; -- 返回结果i,i=2

-- 由以上代码可知当存储过程的参数为out时,变量的值不会被传入,并且存储过程内部的赋值运算可以影响到外部传入的变量

inout:

-- 创建一个存储过程,参数为inout
create procedure test(inout i int)
begin
	select i; -- 返回结果i,i=1
	set i=2;
	select i; -- 返回结果i,i=2
end

-- 调用存储过程test,并传入一个参数i=1
set @i=1; -- 定义全局变量i
call test6(@i);
select @i; -- 返回结果i,i=2

-- 由以上代码可知当存储过程的参数为out时,会传入变量的值,并且存储过程内部的赋值运算可以影响到外部传入的变量

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值