例子:
首先建立一個(gè)存儲(chǔ)過程p_Test,返回一個(gè)結(jié)果集
create PRocedure p_Test
@RCNID char(10)
as
begin
select RCNID,RCNDTE,NODENAM from JK_RCNNODE WHERE RCNID=@RCNID
return
end
再建立一個(gè)存儲(chǔ)過程,對(duì)p_Test存儲(chǔ)過程進(jìn)行嵌套調(diào)用,使用p_Test返回的結(jié)果集
Create procedure p_Main
as
begin
create existing table almsdb.dbo.tt /*為要調(diào)用的存儲(chǔ)過程建立現(xiàn)有表*/
(RCNID char(10) null,
RCNDTE char(10) null,
NODENAM varchar(100) null,
_RCNID char(10) null
)
external procedure
at 'local.almsdb.dbo.p_Test '
select * from tt where RCNID='0000011312' /*使用現(xiàn)有表--存儲(chǔ)過程返回的記錄集*/
drop table tt
return
end
注釋:
almsdb.dbo.tt: 數(shù)據(jù)庫(kù)名.擁有者.表名(其實(shí)是一個(gè)視圖名稱--只讀)
local :Sybase ASE 數(shù)據(jù)庫(kù)服務(wù)器名稱(也可以是遠(yuǎn)程鏈接數(shù)據(jù)庫(kù)服務(wù)器名)
建立方法:
sp_addserver 'local', null, '10.232.27.147:4100'
sp_addexternlogin 'local', 'almsdbo', 'almsdbo', 'almsalms'
注意上面兩個(gè)系統(tǒng)存儲(chǔ)過程的執(zhí)行需要dbo的操作權(quán)限,由數(shù)據(jù)庫(kù)管理員配制好就可使用。
現(xiàn)有表almsdb.dbo.tt的定義與存儲(chǔ)過程返回的結(jié)果集相對(duì)應(yīng),包括數(shù)據(jù)類型、長(zhǎng)度/精確度、小數(shù)點(diǎn)后的位數(shù)(scale)以及 null/not null 等特征。
現(xiàn)有表almsdb.dbo.tt只能接收存儲(chǔ)過程返回的第一個(gè)結(jié)果集。
/*******************************************/
改進(jìn)一:
描述:為了能夠并行執(zhí)行,將現(xiàn)有表改為臨時(shí)現(xiàn)有表almsdb.dbo.tt-->#tt
這樣存儲(chǔ)過程并行執(zhí)行時(shí)就不會(huì)發(fā)生并發(fā)問題
/*******************************************/
改進(jìn)二:
描述:
關(guān)于存儲(chǔ)過程的參數(shù),如何實(shí)現(xiàn)包含參數(shù)的存儲(chǔ)過程。在現(xiàn)有表中使用“_”的列來定義存儲(chǔ)過程的參數(shù),這些參數(shù)列不會(huì)在結(jié)果集中出現(xiàn),但可以查詢引用,CIS將通過名為@+列名的參數(shù)將搜索自變量傳遞到存儲(chǔ)過程中。
/********************************************/
即將上面p_Main過程更改為:
create existing table #tt
(RCNID char(10) null,
RCNDTE char(10) null,
NODENAM varchar(100) null,
_RCNID char(10) null
)
external procedure
at 'local.almsdb.dbo.p_Test '
select * from #tt where RCNID='0000011312'
drop table #tt
新聞熱點(diǎn)
疑難解答
圖片精選