定義:
一組爲了完成特色定功能的SQL語句集合,編譯後存儲在數據庫中,能夠經過指定存儲過程造成並給出參數執行。數據庫
語法
create proc | procedure pro_name
[{@參數數據類型} [=默認值] [output],
{@參數數據類型} [=默認值] [output],
....
]
as
SQL_statements
修改
alter proc proc_get_student
as
select * from student;
不帶參數存儲過程
建立:create proc proc_get_student
as
select * from student;調用:exec proc_get_student;
帶參數存儲過程
建立:create proc proc_find_stu(@startId int = 1, @endId int = 2)
as
select * from student where id between @startId and @endId默認參數根據須要設置
調用(默認參數):exec proc_find_stu;
調用(自定義參數):exec proc_find_stu 2, 4;
帶輸出參數存儲過程
建立:create proc proc_getStudentRecord(@id int, --默認輸入參數
@name varchar(20) out, --輸出參數
@age varchar(20) output--輸入輸出參數
)
as
select @name = name, @age = age from student where id = @id and age = @age;調用:declare @id int,
@name varchar(20),
@temp varchar(20);
set @id = 7;
set @temp = 1;
exec proc_getStudentRecord @id, @name out, @temp output;
select @name, @temp;
print @name + '#' + @temp;
存儲過程優缺點
優勢:緩存
-
- 減小網絡數據量,下降網絡開銷
- 執行速度快,建立時編譯一次,之後不須要從新編譯。通常SQL每次執行都須要編譯(不命中緩存時)
- 多條語句批處理,減小數據庫鏈接次數
- 參數化,防止SQL注入
- 可控制存儲過程使用權限
- 有些時候修改只須要修改存儲過程,不須要修改程序代碼
缺點:網絡
-
- 使用複雜的存儲過程,可是數據庫不擅長處理邏輯
- 維護問題,不易調試,發現問題。表結構發生改變,涉及的存儲過程修改問題。多副本部署問題。