SQL中调用ORACLE存储过程


    SQL Server 调Oracle存储程 收藏
    原文:
    通SQL  Linked  Server 执行Oracle 存储程结
    1 举例
    通面方法SQL Server中通Linked Server 执行Oracle 存储程
    (1)  Oracle Package
    PACKAGE Test_PACKAGE AS
           TYPE 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 t_t
            p_MSG1 OUT t_t
          )
       END Test_PACKAGE
    PACKAGE BODY Test_PACKAGE AS
           PROCEDURE Test_procedure1
            ( p_BATCH_ID IN VARCHAR2
              p_Number IN number
              p_MSG OUT t_t
              p_MSG1 OUT t_t
            )
            AS
            BEGIN
            p_MSG(1)'c'
            p_MSG(2)'b'
            p_MSG(3)'a'
    p_MSG1(1)'abc'
            RETURN
            COMMIT
             EXCEPTION
                WHEN OTHERS THEN
                    ROLLBACK
            END Test_procedure1
         END Test_PACKAGE

    (2) SQL Server中通Linked Server 执行Oracle 存储程

    declare @BatchID nvarchar (40)
    declare @QueryStr nvarchar (1024)
    declare @StatusCode nvarchar(100)
    declare @sql nvarchar(1024)
    set @BatchID'AAA'
    SET @QueryStr'{CALL GSN Test_PACKAGETest_procedure1('''''+@BatchID+'''''''''4''''{resultset 3 p_MSG}{resultset 1 p_MSG1})}'

    (3)执行结果
    (a)
    select @sql'SELECT  @StatusCodep_msg  FROM OPENQUERY (HI4DB_MS'''+@QueryStr+''')'
    exec sp_executesql @sqlN'@StatusCode nvarchar(100) output'@StatusCode output
    print @StatusCode
    答案@StatusCode’a’

    (b)
    select @sql'SELECT top 3 @StatusCodep_msg  FROM OPENQUERY (HI4DB_MS'''+@QueryStr+''')'
    exec sp_executesql @sqlN'@StatusCode nvarchar(100) output'@StatusCode output
    print @StatusCode
    答案@StatusCode’a’

    (c)
    select @sql'SELECT top 2 @StatusCodep_msg  FROM OPENQUERY (HI4DB_MS'''+@QueryStr+''')'
    exec sp_executesql @sqlN'@StatusCode nvarchar(100) output'@StatusCode output
    print @StatusCode

    答案@StatusCode’b’
    (d)
    select @sql'SELECT top 1 @StatusCodep_msg  FROM OPENQUERY (HI4DB_MS'''+@QueryStr+''')'
    exec sp_executesql @sqlN'@StatusCode nvarchar(100) output'@StatusCode output
    print @StatusCode
    答案@StatusCode’c’

    (e)
    SET @QueryStr'{CALL GSN Test_PACKAGETest_procedure1('''''+@BatchID+'''''''''4''''{resultset 1 p_MSG1}{resultset 3 p_MSG})}'(注意里p_MSG1p_MSG交换次序)
    EXEC('SELECT  p_msg1   FROM OPENQUERY (HI4DB_MS'''+@QueryStr+''')') 
    select @sql'SELECT @StatusCodep_msg1  FROM OPENQUERY (HI4DB_MS'''+@QueryStr+''')'
    exec sp_executesql @sqlN'@StatusCode nvarchar(100) output'@StatusCode output
    print @StatusCode
    答案 @StatusCode’abc’

    2 述方法条件
    (1)  Link ServerMicrosoftDriver〔Microsoft OLE DB Provider for Oracle〕
    (2)  Oracle Package中Procedure返回参数Table类型目前table
    试成功栏位
    (3)  SQL ServerStore Procedure调Oracle Procedure时返回参数名字必须Procedure相

    3 述方法点
    (1) 果实现OracleSQL Server数库〞间Trans处理OracleProcedureCommitrollback等语句SQL ServerStore Procedure控制整Trans时commit
    (2) 假设返回参数1返回参数次序调换调时返回第出现返回参数面执行结果(e)输入参数返回参数序调换
    (3) { resultset n p_MSG1}里n表示返回表行数N等实际行数实际行数会报错
    (4) 假设返回表行记录执行
      select @sql'SELECT  @StatusCodep_msg  FROM OPENQUERY (HI4DB_MS'''+@QueryStr+''')'  
    exec sp_executesql @sqlN'@StatusCode nvarchar(100) output'@StatusCode output 
      print @StatusCode @StatusCode中值行记录值 执行结果(a)

    4 动态SQL语句
    (1)普通SQL语句Exec执行
    eg   Select * from MCITY
          Exec('select * from MCITY)
          sp_executesql N'select * from tableName'     请注意字符串前定加N

    (2)字段名表名数库名类作变量时必须动态SQL
    eg  declare @FielsName  varchar(20) 
    declare  @sqls nvarchar(1000)
    set @FielsName  'CITY'
    Select @FielsName from MCITY                      错误
    Exec('select ' + @FielsName + ' from MCITY ')      请注意 加号前单引号边加空格
    set @sqls'select ' + @FielsName + ' from MCITY '
    exec sp_executesql @sqls
    然字符串改成变量形式
    declare @s varchar(1000)
        set @s  'select ' + @FielsName + ' from MCITY'
        Exec(@s)                 成功
        exec sp_executesql @s    句会报错
        declare @s Nvarchar(1000)   注意处改nvarchar(1000)
        set @s  'select ' + @fname + ' from from MCITY'
        Exec(@s)                 成功   
        exec sp_executesql @s    句正确

    (3) 输出参数
    eg declare  @num int
    declare  @sqls nvarchar(1000)
    declare  @strTableName nvarchar(55)
    set  @strTableName'MCITY'
    set  @sqls'select count(*) from ' +@strTableName
    exec (@sqls)
    exec执行结果存入变量@num中
    declare  @num int
    declare  @sqls nvarchar(1000)
    declare  @strTableName nvarchar(55)
    set  @strTableName'MCITY'
    set  @sqls'select @acount(*) from '+@strTableName
    exec  sp_executesql @sqlsN'@a int output'@num output
    select  @num

    〔注:SQLsv02Qservice测试通〕



    删重复数:
    delete top(1) from table where name in( select name from table group by name having count(name)>1 )


    SELECT *FROM table WHERE (id IN(SELECT MAX(id) FROM table GROUP BY name))


    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    数据库面试题(SQL+ORACLE)

    数据库基础(面试常见题)一、数据库基础1. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式2. SQL语言包括数据定义、数据操纵(Data Manipulation),数据控制...

    9年前   
    552    0

    51CTO下载-Oracle_DB常用经典sql查询

    oracle常用经典SQL查询 常用SQL查询:   1、查看表空间的名称及大小   select t.tablespace_name, round(sum(bytes/(1024...

    5年前   
    883    0

    技能高考专题:Access中的SQL语句(1)

    ACCESS数据库的SQL语句教学 2009-07-01 20:50:47  作者:  来源:互联网  浏览次数:229  文字大小:【大】【中】【小】 引子:如何找到ACCESS数据库的SQ...

    3年前   
    634    0

    聚焦问题解决 发展计算思维—《过程调用》教学案例

    聚焦问题解决 发展计算思维—《过程调用》教学案例一、教学内容分析算法与程序设计是信息技术学科的核心内容之一,是发展学生计算思维的重要载体。《过程调用》是浙江省小学信息技术五年级下册第12课,位...

    1年前   
    298    1

    项目管理中的过程性

    项目管理中的过程性  项目是为完成某一独特的产品或服务所做的一次性努力。根据这个定义,项目就具有目标明确性、活动一次性及资源消耗性等特性。换句话说,具备前面3个主要特性的活动,都可以被看做项目...

    10年前   
    721    0

    oracle资料

    oracle学习资料

    6年前   
    1446    0

    DBA常用Sql语句

    查看表空间的名称及大小: SQL>select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_ta...

    5年前   
    1273    0

    SQL上机练习

    创建如下数据表并插入如下数据: create table S (SNO CHAR(6) NOT NULL, SNAME CHAR(8) NOT NULL, SSEX CHAR(2), ...

    5年前   
    1186    0

    SQL语言学习总结

    SQL语言学习总结  暑假过的真快总感觉昨天才刚放假,还想着这个暑假怎么过时,暑假就已经去了。  这个暑假一开始我们看了浙大的sql的视频,老师给我们的要求是只要看一遍就行。刚开始看的时候还能...

    9年前   
    743    0

    oracle学习心得

    oracle学习心得第一篇:oracle学习心得一、sql server的理解sql server服务器就像一栋大楼,大楼里的机房就像服务器的数据库,机房里的电脑如同数据库里的表1、 登录用户...

    11年前   
    702    0

    oracle实验报告

    《Oracle数据库设计与 实现》 总结报告 成绩:-------------- ...

    2年前   
    508    0

    空调用制冷技术课程设计

    XX 学 院 设计说明书 空调用制冷技术 设计计算书专 业 班 级 ...

    3年前   
    468    0

    「WMI」-WMI-For-C COM-调用方法

           Win32 Provider不仅仅提供类和实例的信息,而且有些Provider会提供了一些方法,供用户调用。调用方法的流程如下:1) 取得Provider实例对象        ...

    3年前   
    502    0

    sql查询语句学习测试答案

    第一部分SQL查询语句的学习单表查询1、--查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值use eeeSELECT 订购日...

    3年前   
    1134    0

    SQL数据的定义实验报告

    实验1、数据定义班级:计自班 姓名: 学号:1、 实验目的熟悉SQL的数据定义语言,能够熟练地使用SQL语句来创建和更改基本表,创建和取消索引。2、 实验内容l 用SSMS创建...

    2年前   
    628    0

    IT项目研发过程中的进度管理研究

    IT项目研发过程中的进度管理研究  0、引言  当前的中国已快速融入到世界经济的全球化的浪潮中,起步晚的中国IT行业也紧追世界步伐。对IT项目管理理论的研究与实践,是IT企业目前急待提高和改进...

    9年前   
    628    0

    在会议实施过程中禁忌事项

    在会议实施过程中禁忌事项  首先,要创建一个工作进度表,这是提高效率、保障活动顺利进行的有效手段。工作表的内容要包括以下几个方面:  1、邀请的贵宾及确认其成行;  2.舞台设计、场地搭建、灯...

    9年前   
    865    0

    销售过程中的“黄灯法则”

    销售过程中的“黄灯法则” 当你正在拥挤的马路上驾车时,尤其是当你急着赶赴一个重要的地方的途中,遇到黄灯时你会怎么做呢?有些人可能会放慢速度小心行驶。而另外一些人可能会加速,闯过去。不幸的...

    12年前   
    13544    0

    演讲过程中恐惧如何消除

    演讲过程中恐惧如何消除  文章导读:对于你的听众来讲,他们每个人都有自己不同的目的,有些人可能在审视你,有些人想了解你要讲什么..而对于你来讲,也要坚持一个坚定不移的目的,就是做好你的报告,而...

    11年前   
    443    0

    经营过程中我们的优势与劣势

    我们的优势:在**  货源  不需要物流仓库  大学生自主创业品牌(噱头) 宝贝种类不多可对货物精心挑选  棉被有很大的市场  我们的劣势:没有资金  技术不成熟  没有经验  物流时间长...

    9年前   
    8051    0

    文档贡献者

    天***猩

    贡献于2024-04-02

    下载需要 10 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档