祝愿大家身体健康!

 站点注册  找回密码
 站点注册

QQ登录

只需一步,快速开始

查看: 3211|回复: 2

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

[复制链接]

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

[复制链接]
ehxz

主题

0

回帖

57万

积分

管理员

积分
572904
贡献
在线时间
小时
2008-3-5 21:47:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?站点注册

×
/***********************************************
************************************************
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

 

 

FROM:

http://blog.csdn.net/lovcal/archive/2008/03/04/2147570.aspx

共享共进共赢Sharing And Win-win Results
SYBASEBBS - 免责申明1、欢迎访问“SYBASEBBS.COM”,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@sybasebbs.com
qiezi

主题

0

回帖

3

积分

新手上路

积分
3
贡献
在线时间
小时
2008-3-24 18:47:43 | 显示全部楼层

我先是定义了一个很复杂的动态sql语句,把它定义为一个存储过程,现在在另一个存储过程中要把该过程的返回结果数据集插入到临时表中,我的语句很简单,但是就是报错,这位大侠看来是为高手,帮下忙啊,我的代码是:

create table #t(a char(20))

insert into #t exec  a       -- 报错为: incorrect syntax near the keyword 'exec'

select *from #t

drop table #t

 

 

注:a是被调用的存储过程

用游标也是这个问题

 

 

共享共进共赢Sharing And Win-win Results
qiezi

主题

0

回帖

3

积分

新手上路

积分
3
贡献
在线时间
小时
2008-3-24 18:48:29 | 显示全部楼层
帮下忙
共享共进共赢Sharing And Win-win Results
您需要登录后才可以回帖 登录 | 站点注册

本版积分规则

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com

QQ|Archiver|PowerBuilder(PB)BBS社区 ( 鲁ICP备2021027222号-1 )

GMT+8, 2024-5-20 20:50 , Processed in 0.042515 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表