何为存储过程:
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
更新示例:
-- nsql_upd_User
DROP PROCEDURE nsql_upd_User
GO
CREATE PROCEDURE nsql_upd_User @vchrUserId@ nvarchar(1000),@vchrOrgId@ nvarchar(1000),@chrStatus@ nvarchar(1000)
AS
BEGIN
UPDATE tblUser
SET chrStatus=@chrStatus@
WHERE vchrUserId=@vchrUserId@
AND vchrOrgId=@vchrOrgId@
END;
GO
搜索示例:
-- nsql_sel_searchUser
DROP PROCEDURE nsql_sel_searchUser
GO
CREATE PROCEDURE nsql_sel_searchUser @vchrUserId@ nvarchar(1000),@vchrOrgId@ nvarchar(1000)
AS
BEGIN
select a.* from tblUser a
where 1 = 1
AND a.vchrUserId like @vchrUserId@
AND a.vchrOrgId like @vchrOrgId@
order by a.vchrUserId
END;
GO
删除示例:
-- nsql_del_User
DROP PROCEDURE nsql_del_User
GO
CREATE PROCEDURE nsql_del_User @vchrUserId@ nvarchar(1000)
AS
BEGIN
DELETE FROM tblUser WHERE vchrUserId= @vchrUserId@
END;
GO
为何使用存储过程:
优势:
- 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
- 当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
- .存储过程可以重复使用,可减少数据库开发人员的工作量。
- 安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
劣势:
- 调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。
- 移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
- 重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
- 如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的。维护起来更加麻烦!