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)