• Viernes 29 de Marzo de 2024, 16:39

Autor Tema:  Llamar Package Oracle Desde Sql Server  (Leído 5379 veces)

alejandroSaldiasV

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Llamar Package Oracle Desde Sql Server
« en: Lunes 14 de Enero de 2008, 18:06 »
0
Hola , tengo un creado un simple package Oracle que recibe 2 parametros de entrada y entraga 1 parametro de salida , un numero.

Posteriormente he creado un procedimiento almacenado que llama a este package , atravez de la instruccion SELECT * OPENQUERY(), utilizando un link server a la BD Oracle, y el string correspondiente al llamado de package :

Declare @OracleCall varchar(8000)
set @OracleCall = 'Insert into #test(Oracle_Result) SELECT * FROM OPENQUERY(BACKOFFICE_E1 , ''{CALL BACKOFFICE.CallFromSqlServerPackage.OracleProc('
set @OracleCall = @OracleCall + ''''''+ @parma1ForOracle + ''''''
set @OracleCall = @OracleCall + ',' + '''''' +  @parma2ForOracle + ''''''
set @OracleCall = @OracleCall + ',' + '''''' +  @parma3ForOracle + ''''''
set @OracleCall = @OracleCall + ',' + '''''' +  @parma4ForOracle + ''''''
set @OracleCall = @OracleCall + ',{resultset 25, ReturnVal})}'')'

al ejecutar el procedimiento me entrega el siguiente mensaje :

Server: Msg 7321, Level 16, State 2, Line 1
An error occurred while preparing a query for execution against OLE DB provider 'MSDAORA'.
OLE DB error trace [OLE/DB Provider 'MSDAORA' ICommandPrepare::Prepare returned 0x80040e14].

el cual no he podido dilucidar que es, anterior tuve errores de sintasis , por la erronea concatenacion de los valores de los parametros , pero eso ya esta solucionado.

alguien tiene experiencia en llamado de Package Oracle desde SQL server , para poder guiarme en que pasos poder realizar para solucionar mi problema ?
muchas gracias

P.D.: trate de realizar un ejemplo mas simple , con un select * from tabla , y parametros y si funciona :

/*Define la consulta que quieres ejecutar
  nota el uso de los parametros
  claro que si los parametros no son numericos
  deberas usar ''.
*/
  declare @sql nvarchar(1024)    
      set @sql = 'SELECT * FROM BACKOFFICE.TERMINALES WHERE CODCOMERCIO=''''@PR1'''' AND CODSUCURSAL=@PR2'


/*Define los parametros que vas a usar
*/
  declare @pr1 nvarchar(1024)    set @pr1 = 2112
  declare @pr2 nvarchar(1024)    set @pr2 = 1

/*Define el linked server donde ejecutaras la consulta
*/
  declare @lnk nvarchar(1024)    set @lnk = 'BACKOFFICE_E1'

/*Reemplaza los parametros por los valores
*/


     set @sql = replace(@sql, '@pr1', @pr1)
     set @sql = replace(@sql, '@pr2', @pr2)
/*Aqui es donde terminas ejecutando la consulta en el linked server
*/
  declare @qry nvarchar(1024)    
      set @qry = 'select * from openquery(@lnk,''@sql'')'
      set @qry = replace(@qry,'@lnk', @lnk)
      set @qry = replace(@qry,'@sql', @sql)
    print @qry
  execute(@qry)