ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:69.42KB ,
资源ID:12067759      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-12067759.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SQL中调用RCLE存储过程.docx)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

SQL中调用RCLE存储过程.docx

1、SQL Server 调用Oracle的存储过程收藏aLa原文如下:通过SQL Linked Server 执行Oracle 存储过程小结1举例我们可以通过下面的方法在SQL Server中通过Linked Server 来执行Oracle存储过程。(1) Oracle PackagePACKAGE Test_PACKAGE ASTYPE t_t is TABLE of VARCHAR2(30)INDEX BY BINARY_INTEGER;PROCEDURE Test_procedure1(p_BATCH_ID IN VARCHAR2,p_Number IN number,p_MSG OUT

2、 t_t,p_MSG1 OUT t_t);END Test_PACKAGE;PACKAGE BODY Test_PACKAGE ASPROCEDURE Test_procedure1(p_BATCH_ID IN VARCHAR2,p_Number IN number,p_MSG OUT t_t,p_MSG1 OUT t_t)ASBEGINp_MSG(1):=c;p_MSG(2):=b;p_MSG(3):=a;p_MSG1(1):=abc;RETURN;COMMIT;EXCEPTIONWHEN OTHERS THENROLLBACK;END Test_procedure1;END Test_PA

3、CKAGE;(2)在SQL Server中通过Linked Server 来执行 Oracle 存储过程declare BatchID nvarchar (40)declare QueryStr nvarchar (1024)declare StatusCode nvarchar(100)declare sql nvarchar(1024)set BatchID=AAASET QueryStr=CALL GSN. Test_PACKAGE.Test_procedure1( +BatchID+, 4”,resultset 3, p_MSG,resultset 1, p_MSG1)(3)执行结果(

4、a)select sql=SELECT StatusCode=p_msg FROM OPENQUERY (HI4DB_MS,”+ QueryStr+)exec sp_executesql sql,NStatusCode nvarchar(100) output,StatusCode outp utprint StatusCode答案:StatusCode= a(b)select sql=SELECT top 3 StatusCode=p_msg FROM OPENQUERY (HI4DB_MS,”+QueryStr+”)exec sp_executesql sql,NStatusCode nv

5、archar(100) output,StatusCode outputprint StatusCode答案:StatusCode= a(c)select sql=SELECT top 2 StatusCode=p_msg FROM OPENQUERY (HI4DB_MS,+QueryStr+)exec sp_executesql sql,NStatusCode nvarchar(100) output,StatusCode outputprint StatusCode答案:StatusCode= b(d)select sql=SELECT top 1 StatusCode=p_msg FRO

6、M OPENQUERY (HI4DB_MS,+QueryStr+)exec sp_executesql sql,NStatusCode nvarchar(100) output,StatusCode outputprint StatusCode答案:StatusCode= c(e)SET QueryStr=CALL GSN. Test_PACKAGE.Test_procedure1( +BatchID+,4”,resultset 1, p_MSG1,resultset 3, p_MSG)-(注意这里 p_MSG1 和 p_MSG 交换次序了)EXEC(SELECT p_msg1 FROM OP

7、ENQUERY (HI4DB_MS,”+QueryStr+) select sql=SELECT StatusCode=p_msg1 FROM OPENQUERY (HI4DB_MS,”+ QueryStr+”)exec sp_executesql sql,NStatusCode nvarchar(100) output,StatusCode outputprint StatusCode答案:StatusCode= abc 2上述使用方法的条件(1) Link Server要使用 Microsoft 的 Driver (Microsoft OLE DB Provider for Oracle

8、)(2) Oracle Package 中的Procedure 的返回参数是 Table类型,目前table 只试成功一个栏位。(3) SQL Server 的 Store Procedure 调用 Oracle Procedure 时,返回参数名字必须和 Pr ocedure 相同。3上述方法的要点如果要实现 Oracle SQL Server数据库”之间的 Trans处理,则 Oracle的Proce dure 不要有 Commit,rollback等语句,让 SQL Server 的 Store Procedure去控制整个 Trans 何日c commit 。(2)假如返回参数大于 1

9、个,返回参数的次序可以调换,调用时只返回第一个出现的返回参数,如上面的执行结果(e)o但是输入参数和返回参数的顺序不能调换。resultset n, p_MSG1 ,这里的n ,表示返回表的行数。N可以大于等于实际的行数,但不能小于实际的行数,会报错。(4)假如返回表有多行记录,执行select sql=SELECT StatusCode=p_msg FROM OPENQUERY (HI4DB_MS,”+ QueryStr+)exec sp_executesql sql,NStatusCode nvarchar(100) output,StatusCode outp utprint Statu

10、sCode, StatusCode中的值为最后一行记录的值,如执行结果(a)。4动态SQL语句(1)普通SQL语句可以用Exec执行eg: Select * from MCITYExec(select * from MCITY)sp_executesql Nselect * from tableName-请注意字符串前一定要加N(2)字段名,表名,数据库名之类作为变量时,必须用动态 SQLeg: declare FielsName varchar(20)declare sqls nvarchar(1000)set FielsName = CITYSelect FielsName from MC

11、ITY-错误Exec(select + FielsName + from MCITY )-请注意加号前后的单引号的边上要加空格set sqls=select + FielsName + from MCITY exec sp_executesql sqls当然将字符串改成变量的形式也可declare s varchar(1000)set s = select + FielsName + from MCITYExec(s)- 成功exec sp_executesql s -此句会报错declare s Nvarchar(1000)-注意此处改为 nvarchar(1000)set s = sele

12、ct + fname + from from MCITYExec(s)- 成功exec sp_executesql s -止匕句正确(3)输出参数 eg: declare num intdeclare sqls nvarchar(1000) declare strTableName nvarchar(55)set strTableName=MCITYset sqls=select count(*) from +strTableNameexec (sqls)如何能将exec执行的结果存入变量num中declare num intdeclare sqls nvarchar(1000)declare

13、 strTableName nvarchar(55)set strTableName=MCITYset sqls=select a=count(*) from +strTableNameexec sp_executesql sqls,Na int output,num outputselect num(注:以上 SQL在sv-02,Qservice 下测试通过。)删除重复数据:delete top(1) from table where name in( select name from table group byname having count(name)1 )SELECT *FROM table WHERE (id IN(SELECT MAX(id) FROM table GROUPBY name)

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报