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