在oracle中建一存储过程,如下
procedure P_TEST(
 v_hm in varchar2
        ,n_result out number
        )
as
begin
   n_result:=0;end P_TEST;我如何通过sqlserver2000中创建的链接服务器OracleDB,来取得n_result的返回值?
虽然通过select * from OpenQuery(OracleDB,'查询语句')可以获取表记录或者执行没有返回值参数的存储过程,但现在我需要从这个存储过程获取这个返回值,该如何处理?

解决方案 »

  1.   


    -- 如果是 SQL Server 2000,只能将存储过程改写为函数,再用 openquery 调用。
    create function P_TEST (v_hm varchar2)
    return number
    is
     n_result number;
    begin
     n_result:=0; return n_result;
    end;
    /
    -- 调用
    select * from openquery(OracleDB, 'select P_TEST(...) from dual;');-- 如果是 SQL Server 2005,可以
    declare @hm varchar(...), @res numeric;
    set @hm='...';
    execute('begin P_TEST(?, ?); end;', @hm, @res output) at OracleDB;
      

  2.   

    也可以通过临时表来处理。
    去临时表中select就可以了
      

  3.   

    按照您说,我在sqlserver2005中执行,报错
    消息 7215,级别 17,状态 1,第 4 行
    无法在远程服务器 'OracleDB' 上执行语句。
      

  4.   

    试验清楚了,那个@res还需要赋值初始化一下,就可以了,多谢xman_78tom
      

  5.   

    你是用ibatis还是hibernate操作数据库的?我今天发现如果是ibatis的话,好像不能接收存储过程中传递过来的NUMBER类型,它好像只能接收varchar类型的返回值,这个问题我要好好搞懂下啊