存儲過程的特點
Sybase的存儲過程是集中存儲在SQL Server中的預先定義且已經編譯好的事務
存儲過程的性能特點如下:
·存儲過程是預編譯過的
·存儲過程和待處理的數據都放在同一台運行SQL Server的計算機上
·存儲過程一般多由Client端通過存儲過程的名字進行調用
·存儲過程還有著如同C語言子函數那樣的被調用和返回值的方便特性
所以
存儲過程的語法規則
建立存儲過程的語法規則為:
CREATE PROCedure[owner
[[(]@parameter_name datatype[=default][OUTput]
[
[WITH RECOMPILE]
AS SQL_statements
使用存儲過程的語法規則為:
[EXECute][@return
[[[server
[[@parameter_name=]value|[@parameter_name=]@varialbe[OUTput]
[
[WITH RECOMPILE]
[page]下面簡要介紹這兩個命令的常用選項以及建立和使用存儲過程的要點
·[[[server
·@parameter_name datatype[=default][OUTput]:形式參數(形參)的名稱
·SQL_statements:定義存儲過程功能的SQL語句
·@return_status:接受存儲過程返回狀態值的變量
·[@parameter_name=]value:實際參數(實參)
·[@parameter_name=]@varialbe[OUTput]:將變量@varialbe中的值作為實參傳遞給形參@parameter_name(可選)
存儲過程的建立和使用
假設有一個用下述語句生成的技能工資表RS
create table RS_LS_GZ_JiNeng /*技能工資表*/
(GeRen_id char(
RiQi smalldatetime
YuanYin_id char(
JinE smallmoney) /*技能工資金額 */
該表存儲著某單位員工多年來技能工資的歷史檔案
例
create procedure p_RsGz_JiNeng_All as
select *
from RS_LS_GZ_JiNeng
order by GeRenid
然後用批處理語句調用存儲過程p_RsGz_JiNeng_All進行查詢:
execute p_RsGz_JiNeng_All
本例只顯示查詢到的數據
例
create procedure p_RsGz_JiNeng @c_GeRenId char(
as
select *from RS_LS_GZ_JiNeng
where GeRen_id=@c_GeRenId
order by RiQi
之後用批處理語句調用存儲過程p_Rs_Gz_JiNeng進行查詢:
declare @GeRenId char(
select @GeRenId=
execute p_RsGz_JeNeng @c_GeRenId=@GeRenId
存儲過程p_RsGz_JiNeng中定義了一個形參@c_GeRenId
例
create procedure p_RsGz_JiNeng_Slt
(@c_GeRenId char(
as
select @sm_JinE=JinE
from RS_LS_GZ_JiNeng
where RiQi=(select max(RiQi)
from RS_LS_GZ_JiNeng
where GeRenid=@c
調用存儲過程p_RsGz_JiNeng_Slt進行查詢:
declare @GeRenId char(
select @GeRenid=
select @JinE=
execute p_RsGz_JiNeng_slt @c_GeRenId=@GeRenId
這裡
例
create procedure p_RsGz_JiNeng_Rtn
@c_GeRenId char(
as
declare @ErrCode smallint
select @ErrCode=
if exists(select* from RS
where GeRenid=@c
begin
select *
from RS_LS_GZ_JiNeng
whrer GeRen_id=@c_GeRenId
order by RiQi
return @ErrCodE
end
eslE
begin
select @ErrCode=
return @ErrCodE
end
調用存儲過程p_RsGz_JiNeng_Rtn:
declare @GeRenId char(
select @GeRenId=
select @RtnCode=
execute @RtnCode=p_RsGz_JiNeng_Rtn @c_GeRenId=@GeRenId
if @RtnCode=
print
存儲過程p_RsGz_JiNeng_Rtn向調用者返回一個存儲在變量@ErrCode裡的值
調用過程的批處理語句使用變量@RtnCode存儲返回的狀態值
小結
上述四個例子簡要介紹了存儲過程常用的幾種形式
雖然上述例子在調用存儲過程時都是用SQL的批處理語句實現的
From:http://tw.wingwit.com/Article/program/Oracle/201311/17494.html