存储过程和触发器

 

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;
2数和

相关文章: