stored procedures bases de datos externas


([N2] Esfero) #1

Hola, por favor alguien sabe si podemos consumir stored procedores desde bases de datos externas???, llevo una par de días haciendo pruebas y no veo luz.


([N3] pacosatu) #2

Hola Esfero.

¿Qué base de datos externa estás probando?
Lo de las “stored procedures” es propio de cada base de datos y habrá que comprobar si el driver ODBC soporta la ejecución de los mismos.

Saludos
Paco Satué


([N2] Esfero) #3

Hola Seh, estoy utilizando SqlServer 2005 y superiores.
En principio por la información que encontré de QT, el ODBC PARA sqlServer si lo soporta, pero no consigo que funcione desde Velneo y como no encuentro ningún tipo de documentación al respecto de velneo, me genera un sin fin de dudas


([N3] pacosatu) #4

Hola Esfero.

Un pequeño ejemplo:


-- Este SP devuelve el registro con los datos de la Divisa
CREATE PROCEDURE Misp_ObtenerDivisas
@divisa char(3)
AS
BEGIN
   SELECT * FROM d_divisa WHERE cod_divisa = @divisa
END

En Velneo, una vez establecida la conexión ODBC, ejecutamos la consulta
Set(ODBC_CONSULTA_SQL, “USE MiBaseDatos; EXEC Misp_ObtenerDivisas ‘EUR’”)

Esto me ha funcionado con SQLEXPRESS 2015 (versión 12.0.4213), pero ya sabes, en esto y otros muchos temas de Velneo dependemos del Prueba y Error.

Saludos
Paco Satué


([N2] Esfero) #5

Bueno pues para cerrar mi consulta os comento, lo primero mil gracias Seh por el apoyo continuo que realizas en el foro.

¿Podemos consumir Procedimientos Almacenados de BD Externas desde Velneo?
(Evidentemente siempre que la BD Externa los Soporte)

La respuesta es Sí. (Al menos en los casos probados SQLServer 2005, SQLServer 2008, SQLServer 2014)

En los casos probados funciona consumiendo el procedimiento almacenado de 2 formas (funcionan las 2):

  • Set(ODBC_CONSULTA_SQL, “EXEC Misp_ObtenerDivisas ‘EUR’”) => Como menciona Seh
  • Set(ODBC_CONSULTA_SQL, “{ CALL Misp_ObtenerDivisas(‘EUR’) }”) => Importante las llaves

A modo de Ejemplo dejo el proceso completo, por si os resulta de ayuda en algún momento

----------- PROCEDIMIENTO ALMACENADO EN SQL SERVER ----------------

– Este SP devuelve el registro con los datos de la Divisa
CREATE PROCEDURE Misp_ObtenerDivisas
@divisa char(3)
@pais char(3)
AS
BEGIN
SELECT * FROM d_divisa WHERE cod_divisa = @divisa AND pais = @pais
END


----- PROCESO EN VELNEO PARA CONSUMIR EL PROCEDIMIENTO ALMACENADO

BD:Crear Manejador(.Manejador, ODBC (Compatible con SQL Server), “DRIVER={SQL Server};SERVER=” + MOTOR + “;DATABASE=” + BD + “;WSID=.;Trusted_connection=yes”)
BD:Conectar(.Manejador, USER, PASS, OK, )
…Set(ODBC_CONSULTA_SQL, “{ CALL Misp_ObtenerDivisas(‘EUR’, ‘ESP’) }”)
…//Set(ODBC_CONSULTA_SQL, “EXEC Misp_ObtenerDivisas ‘EUR’, ‘ESP’”)
…BD:SQL(.Manejador, ODBC_CONSULTA_SQL, N_ROWS, )
…BD:Recorer Lista(.Manejador)
Instrucciones …