存储过程和触发器
001 介绍存储过程和如何调用系统的存储过程
存储过程---就像数据库中运行的方法(函数)
由存储过程名/存储过程参数组成/可以由返回结果
if else/while/变量/insert/select等,都可以在存储过程中使用
优点:
执行速度更快 - 在数据库中保存的存储过程语句都是编译过的
允许模块化程序设计 - 类似方法的复用
减少网络流通量 - 只要传输 存储过程的名称
系统存储过程:
由系统定义,存放在master数据库中
名称以sp_开头或xp_开头,自定义的存储过程可以以usp_开头
自定义存储过程:
由用户自己在数据库中创建的存储过程usp
系统存储过程:
sp_databases 列出服务器上的所有数据库
sp_helpdb 显示有关数据库或所有数据库的信息
sp_renamedb 重命名数据库的名称
sp_tables 返回当前环境下某个表的表的信息
sp_collumns 返回某个表的列的信息
sp_help 显示某个表的所有信息
sp_helpconstraint 显示某个表的约束
sp_stored_procedures 列出当前环境下的所有存储过程
sp_password 添加或修改登录账户的密码
sp_helptext 显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。
exec sp_databases //exec调用这个系统存储过程,可以没有exec
sp_helptext sp_tables //显示某个存储过程sp_tables的代码
alter替换Create 就是修改存储过程
如果C#参数类型如果是string,则SQL Server中为nvarchar(50)
----------------------------------------------
002 存储过程小案例
定义存储过程的语法
CREATE PROCEDURE 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
参数说明:参数可选,参数分为输入参数、输出参数,输入参数允许有默认值
EXEC 过程名 [参数]
1--创建存储过程:两个数相加
CREATE PROCEDURE usp_AddTwoNumber
@num1 int,
@num2 int
AS
BEGIN
SELECT @num1+@num2
END
--第一种调用:自定义存储过程的调用必须加EXEC
declare @n1 int=100,@n2 int=200
--EXEC usp_AddTwoNumber @num1=@n1,@num2=@n2
--第二章调用:
EXEC usp_AddTwoNumber @n1,@n2
--第三种调用:
EXEC usp_AddTwoNumber 100,200
2--创建存储过程:两数相加并返回
CREATE PROCEDURE usp_AddNumber
@num1 int,
@num2 int,
@sum int OUTPUT
AS
BEGIN
SET @sum=@num1+@num2
END
--调用这个存储过程:如果是存储过程中需要传出来的值,用OUTPUT进行修饰,外面调用的时候也需要加上OUTPUT
declare @n1 int=10,@n2 int=20,@sm int
EXEC usp_AddNumber @n1,@n2,@sm OUTPUT
SELECT @sm
Oralce中存储过程的重点:
|| 表示连接两个字符串,或者一个变量与字符串进行连接
" 双引号表示一个引号'
//Oracle中的求2数和:
CREATE OR REPLACE PROCEDURE PRO_AddTwoNumber( num1 NUMBER, num2 NUMBER ) IS strSql varchar(200); BEGIN strSql:='select '||num1||'+'||num2||' FROM DUAL'; execute immediate strSql; EXCEPTION WHEN OTHERS THEN DBMS_output.PUT_LINE(SQLERRM); END PRO_AddTwoNumber;