SQL 之 存储过程、参数和函数

存储过程和参数

区别于之前的用单独一条语句检索数据,现在把多条语句保存到一个叫存储过程的单独对象中。

 

使用存储过程的原因:

1. 把多条SQL语句保存到单独的过程中

2. 把参数和SQL语句结合使用(也可以不含参数)

 

一、创建存储过程

CREATE PROCEDURE ProcedureName,

AS

[OptionalParameterDeclarations]

BEGIN

SQLStatements

END

 

MySQL版本:

DELIMITER $$

CREATE PROCEDURE ProcedureName()

BEGIN

SQLStatements

END$$

DELIMITER ;

 

第一行的作用:把分隔符从逗号临时改为$$,所需的参数在圆括号中指定,最后必须有分号; 。关键字END后的$$符号,表示CREATE PROCEDURE命令结束。最后一行把分隔符改回分号。

 

简单示例:

创建一个存储过程,可以用来执行下面:

SELECT *

FROM Customers

 

CREATE PROCEDURE ProcedureOne

AS

BEGIN

SELECT *

FROM Customers

END

没有参数,AS后面直接是BEGINEND(里面是SQL语句)

注意SQLBEGINEND之间的SQLStatements不需要以分号结尾,而

 

MySQL

DELIMITER $$

CREATE PROCEDURE ProcedureOne()

BEGIN

SELECT *

FROM Customers;

END$$

DELIMITER ;

 

MySQLBEGINEND之间的SQLStatements需要以分号结尾,所以要使用DELIMITER暂时把分隔符改为$$以免还没定义完整过程就结束了命令。

 

创建存储过程不会执行任何东西,只是可以在以后执行它。

 

二、存储过程的参数

 

比如接受CustomerID这一参数:

SELECT *

FROM Customers

增加WHERE子句,选取特定客户的数据:

SELECT *

FROM Customers

WHERE CustomerID = ParameterValue

 

CREATE PROCEDURE CustomerProcedure

(@CustID INT)

AS

BEGIN

SELECT *

FROM Customers

WHERE CustomerID = @CustID

END

SQL使用@来表示变量。

 

 

MySQL版本:

DELIMITER $$

CREATE PROCEDURE CustomerProcedure

(CustID, INT)

BEGIN

SELECT *

FROM Customers

WHERE CustomerID = CustID;

END$$

DELIMITER ;

 

三、执行存储过程

SQL ServerEXEC ProcedureOne

即返回ProcedureOne里面包含的SELECT语句的结果。注意ProcedureOne不带参数。

EXEC CustomerProcedure

@CustID = 2

 

MySQL版本:

CALL ProcedureOne;

CALL CustomerProcedure(2);

 

四、修改和删除存储过程

 

ALTER关键字,语法和CREATE PROCEDURE一样。

 

比如修改只想看某个客户的前5行记录:

ALTER PROCEDURE CustomerProcedure

(@CustID, INT)

BEGIN

SELECT

TOP 5 *

FROM Customers

WHERE CustomerID = @CustID

END

 

删除

DROP PROCEDURE CustomerProcedure

 

此外,SQL还提供关键字CREATE FUNCTIONALTER FUNCTIONDROP FUNCTION等创建、修改、删除自己定义的函数。

 

五、存储过程VS函数:

(1)存储过程可以有任意数目的输出函数:甚至可以没有。但是一个函数必须只有一个单一的返回值。

(2)通过调用程序来执行存储过程。不能在SELECT语句中直接引用存储过程,但可以在语句中引用函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值