Sybase 存储过程(嵌套调用)使用另外一个存储过程的结果集

/***********************************************
************************************************
Sybase存储过程(嵌套调用)使用另一个存储过程结果集
作者:王衍锋
日期:2008年3月5日
***********************************************
***********************************************/
 
关于Sybase ASE 中存储过程嵌套调用,特别是主存储过程要使用子存储过程返回的结果集的情况,由于Sybase 中不支持T-SQL 中的行集函数openrowset和opendatasource两种方法,而且,目前版本(Sybase 12.5)不支持用户自定义函数,因此,给引用被调用子存储过程返回的结果集造成了很大的不方便性。这里介绍使用Sybase“现有表”来实现应用方法。
 
例子:
首先建立一个存储过程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只能接收存储过程返回的第一个结果集。
 
/*******************************************/
改进一:
时间:2008/3/5
作者:王衍锋
描述:为了能够并行执行,将现有表改为临时现有表almsdb.dbo.tt-->#tt
这样存储过程并行执行时就不会发生并发问题
/*******************************************/
改进二:
时间:2008/3/5
作者:王衍锋
描述:
关于存储过程的参数,如何实现包含参数的存储过程。在现有表中使用“_”的列来定义存储过程的参数,这些参数列不会在结果集中出现,但可以查询引用,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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值