SYBASE — Cargar el resultado de un Stored procedure en una tabla

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



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *