Para llenar una tabla con el resultado de un stored procedure en Sybase se hace necesario mapear una tabla proxy, la tarea principal de esta tabla proxy es que cada vez que se haga “select” sobre la misma, un mecanismo interno dentro de la tabla ejecuta el stored procedure y el resultado de este es guardado en la tabla, el select sobre la tabla retorna los datos que el sp devuelve.
Es algo similar a lo que pasa cuándo en SQLSEVER se llena una tabla temporal o variable tipo tabla:
Declare @VariableTabla (Correlativo int, nombre varchar(50))
Insert into @VariableTabla
Exec sp_dameCorrelativoYNombre
Paso 1: Crear el Loopback server
El procedimiento requiere definir un servidor “loopback” que apunte a el mismo, en otras palabras que mi servidor apunte a sí mismo.
Creando el loopback server:
sp_addserver loopback, null, @@severname
No es necesario crear el loopback server si se tienen instaladas las tablas MDA, la versión ASE 15 ya trae instaladas dichas tablas, presumiblemente las versiones posteriores también.
Paso 2: Crear el Stored procedure
Vamos a utilizar el stored procedure interno de Sybase sp_spaceused porque queremos obtener el porcentaje de espacio utilizado del log de transacciones.
create procedure usp_spaceusedsyslogs
as
exec sp_spaceused ‘syslogs’
go
Paso 3: Crear la tabla proxy
El stored procedure anterior devolverá los campos:
Entonces, en base a esto pasamos a crear la tabla.
create existing table utbl_spaceusedsyslogs
(name char(20),total_pages int, free_pages int, used_pages int, reserverd_pages int)
external procedure at ‘loopback.LTD..usp_spaceusedsyslogs’
go
como muestra la sentencia:
external procedure at ‘loopback.LTD..usp_spaceusedsyslogs’
la tabla será llenada con el resultado de la ejecución del stored procedure que hemos creado anteriormente.
Si ejecutamos select * from utbl_spaceusedsyslogs obtendremos el resultado que nos devolvería la ejecución: exec sp_spaceused ‘syslogs’.
Con esto, ya podremos utilizar los datos para transformarlos según nuestra necesidad, en este caso obtener el porcentaje de llenado del transaction log de la base de datos de Sybase.
Ejemplo:
select (convert(float,used_pages) / convert(float,total_pages))*100 porcentaje_usado from utbl_spaceusedsyslogs
Resultado:
El procedimiento es sencillo en sí mismo, puede causar confusión el loopback server, para evitar esto es necesario profundizar en el estudio del mismo lo cual está fuera del objetivo de este artículo.
Apoyado en el artículo: Getting a stored procedure’s result set in a table
Enlace: http://www.sypron.nl/proctab.html