Transact SQL 003 Store Procedure

in #spanish6 years ago (edited)


En post anteriores hemos realizado prácticas de Transact SQL bajo MySQL, unión de tablas, una herramienta que nos permite interactuar con tablas que comparten uno o más columnas, permitiendo generar estructuras más completas con el cruce de estas.

Uso de funciones, la manipulación de cadenas de caracteres, operaciones numéricas, fechas y otras. Todos los lenguajes de programación trabajan con el uso de funciones y transact no sería diferente. En tal sentido manipular la información de los campos en nuestras consultas se puede reducir tiempo de ejecución y sobre todo código repetido. Ayudando incluso a que nuestro código sea más limpio.

En el vídeo de este post se prueba la creación y uso de los Stored Procedures (SP), estas pequeñas bibliotecas de código almacenadas por el mismo manejador de bases de datos ayudan de diferentes formas. Permiten generar una capa código reutilizable, un SP puede ser llamado en cualquier momento desde un programa sin importar que modulo esta siendo ejecutado, este al encontrarse en la capa del manejador de bases de datos está siempre accesible, ayudando a no repetir código.

La extracción y manipulación de la información es más rápida, Sin embargo, un SP puede ejecutar instrucciones que no utilice sentencias SQL. Existen otros tipos de bibliotecas de código dentro de los manejadores de Base de Datos con son los Trigers (Disparadores) y las vistas. La diferencia entre un disparador y un SP radica en su ejecución. Para usar un SP se usa la instrucción call para invocarlo.

El disparador se ejecuta de forma automática cuando una condición determinada, previamente definida se cumple. Por ejemplo un disparador puede ejecutarse cada vez que un Insert afecta una tabla. Podríamos llevar un contador de cuantos insert se han ejecutado. Si queremos llevar un log de transacciones, se puede programar un disparador que agregue la operación transact SQL ejecutada y el usuario que lo hizo en una tabla log. De esta forma si alguien modifica nuestras tablas usando una ruta diferente al sistema también quedará registrado.

Los SP y disparadores son funciones de los manejadores bases de datos y no del lenguaje Transact SQL, aún así su implementación es parte vital en la actualidad y son muy afines.

La sintaxis base para crear un SP es algo similar a lo siguiente:


CREATE PROCEDURE nombre_SP (OUT campo INT)
-> BEGIN
-> SELECT COUNT(*) INTO campo FROM tabla;
-> END

Esta es la sintaxis básica para crear un SP, podemos observar la instrucción OUT, es la definición del comportamiento de la varíable del SP, estas pueden ser entrada IN, salida out u ambas INOUT.

Cuando colocamos la variable como de entrada, son los parámetros que le pasaremos al SP para que este pueda realizar los procesos programados, serán variables utilizables dentro del mismo.

Las de salida, son parámetros que el SP nos devolverá y donde almacenaremos nuestros resultados que devolveremos al sistema donde se invocó el SP.

Los de entrada y salida pueden cumplir ambas funciones, en este caso debe tenerse cuidado de que el tipo de dato ingresado sea del mismo declarado para la salida.

Para invocar un SP se utiliza la sintaxis Call nombre_SP (parametros), los parámetros serán colocados según el tipo definido en el SP, numéricos, cadenas, etc.

En esta práctica usaremos las siguientes estructuras:


CREATE TABLE tblasientocontable (
identificador int(10) unsigned NOT NULL auto_increment,
cuentacontable varchar(10) NOT NULL default '',
detalle varchar(60) NOT NULL default '',
debe decimal(12,2) NOT NULL default '0.00',
haber decimal(12,2) NOT NULL default '0.00',
fechaasiento date NOT NULL default '0000-00-00',
fechaproceso date NOT NULL default '0000-00-00',
nocomprobante int(10) unsigned NOT NULL default '0',
modulo int(10) unsigned NOT NULL default '0',
user varchar(10) NOT NULL default '',
refbase bigint(20) unsigned NOT NULL default '0',
linea bigint(20) unsigned NOT NULL default '0',
nogasto bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (identificador),
KEY FK_tblasientocontable_1 (cuentacontable)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Esta estructura se ha usado en los post anteriores y no necesita mayor explicación


CREATE TABLE usuario (
id_usuario bigint(20) unsigned NOT NULL auto_increment,
id_tipo_usuario bigint(20) unsigned NOT NULL default '0',
cedula varchar(15) NOT NULL default '',
nombre varchar(45) NOT NULL default '',
activo bit(1) NOT NULL default '\0',
clave varchar(10) NOT NULL default '',
usuario varchar(10) NOT NULL default '',
fecha_creacion date NOT NULL default '0000-00-00',
PRIMARY KEY (id_usuario)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Una tabla sencilla usada para guardar información básica de acceso al sistema, se realizan las primeras pruebas de inserción de data, un uso muy común dentro de los SP.

Los SP tienen una serie de restricciones en MySQL que se pueden observar en su Manual de Usuario en este Link, MySQL tiende a tratar las funciones,SP y Desencadenadores como un tema completo, sin embargo, son diferentes y existen restricciones que los afectan por seaparado y otras de forma común. Es importante darle un repaso a esta sección del manual para aclarar conceptos y conocer las limitaciones.

PostContenidoIr
Instalacion Servidor LAMP en Xubuntu 18.04Vídeo explicativo de la instalación de servidor LAMP de laboratorio basePost 01
Transact SQL, Unión de tablas (Join)Práctica del uso de las formas de Join para consultas de tablas enlazadasPost 02
Transact SQL 002 FuncionesPráctica del uso de Funciones, numéricas, cadenas, etc.Post 03

Referencia

  • Manual de Referencia en línea MySQL 8.0 link
  • La herramienta MySQL Workbench puede Descargarse de aquí

Imágenes

La imagen de la miniatura fue compuesta con Gimp 2.10 utilizando la siguiente Fuente, de PixBay


▶️ DTube
▶️ IPFS
Sort:  

20180624_093612.gif

Excelente tutorial, aunque a veces la música se eleva un poco y distrae de tu voz.
Banner (Firma para Comentarios).png

Hola @Ubaldonet. Pendiente del tutorial. Buena entrega. Saludos y éxito.

Gracias, ya esta agarrando más forma.



This post has been voted on by the steemstem curation team and voting trail.

There is more to SteemSTEM than just writing posts, check here for some more tips on being a community member. You can also join our discord here to get to know the rest of the community!

Gracias por el apoyo

Este post fue votado por la comunidad y trail @developspanish, comunidad encargada de curar a los programadores, traductores de software y bloggers de informática y tecnología de habla hispana.

¿Quieres recibir mejores recompensas en tus post de informática, tecnología o programación, ayúdanos delegando algo de SP:
1 SP, 5 SP, 10 SP

Hi @ubaldonet!

Your post was upvoted by utopian.io in cooperation with steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

Contribute to Open Source with utopian.io

Learn how to contribute on our website and join the new open source economy.

Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV

Genial el tutorial hermano, aunque en mi caso me cueste digerirlo. Pero como siempre contenido de calidad.

Si este Tutorial a diferencia de otros post de mi blog, es un material más especializado a usuarios del lenguaje SQL, ya en un termino un poco más avanzado pues no empieza con el ABC de muchos cursos explicando variables y sintaxis básica, lo hice pensando en personas que necesitan más un nivel intermedio y aún pensando si lo llevare a nivel avanzado.

Pero como todo en tecnología abarca desde cuestiones cotidianas de la vida, el uso de un smartphone o un PC, hasta material de este tipo.

Congratulations @ubaldonet! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:
SteemitBoard and the Veterans on Steemit - The First Community Badge.

You can upvote this notification to help all Steemit users. Learn why here!

Congratulations @ubaldonet! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:
SteemitBoard and the Veterans on Steemit - The First Community Badge.

You can upvote this notification to help all Steemit users. Learn why here!

Coin Marketplace

STEEM 0.31
TRX 0.11
JST 0.033
BTC 64275.02
ETH 3139.81
USDT 1.00
SBD 4.14