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

来源:互联网 发布:淘宝客设置了30%佣金 编辑:程序博客网 时间:2024/05/04 06:02

存储过程和参数

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

 

使用存储过程的原因:

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 0
原创粉丝点击