Procedimientos Almacenados con InterBase



Documentos relacionados
Guía de uso del Cloud Datacenter de acens

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA DE LA FUERZA ARMADA NACIONAL EXTENSIÓN BARQUISIMETO BARQUISIMETO ESTADO. LARA

Introducción a PHP. * No es necesario declarar previamente las variables.

Sesión No. 4. Contextualización INFORMÁTICA 1. Nombre: Procesador de Texto

COMANDOS DE SQL, OPERADORES, CLAUSULAS Y CONSULTAS SIMPLES DE SELECCIÓN

Curso de PHP con MySQL Gratis

Manual para la utilización de PrestaShop

Base de datos Procedimientos Almacenados y Funciones

Transacciones y bloqueos en SQL-Server

Capítulo 9. Archivos de sintaxis

Base de datos relacional

LAS SUBCONSULTAS SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Manual Oficina Web de Clubes (FBM)

MANUAL COPIAS DE SEGURIDAD

Base de datos en Excel

CONSULTAS DE RESUMEN SQL SERVER Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Host. En este texto, entenderemos por host toda máquina - léase computadora. Cuenta. Una cuenta, en general, es un espacio de memoria y de disco que

Mantenimiento Limpieza

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

Hostaliawhitepapers. Las ventajas de los Servidores dedicados. Cardenal Gardoki, BILBAO (Vizcaya) Teléfono:

5. Diseño e Implementación del sistema (software)

Trabajos de Ampliación. Bases de datos NoSQL.

Instalación y uso de Check 2000 Client Server con ZENworks 2

- Bases de Datos - - Diseño Físico - Luis D. García

Enlaces relacionados:

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Oficina Online. Manual del administrador

CONSULTAS BASICAS EN SQL SERVER

Consultas con combinaciones

DOCUMENTOS COMPARTIDOS CON GOOGLE DOCS

ARANZADI INFOLEX COPIAS DE SEGURIDAD.

MANUAL DE CS-ALMACENES (MAYO 2012)

CAPÍTULO 2 DEFINICIÓN DEL PROBLEMA

Internet Information Server

Tutoriales sobre Moodle. EOI de Murcia. 0. Instrucciones para el volcado de cursos entre profesores

ing Solution La forma más efectiva de llegar a sus clientes.

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Guía Práctica para el Uso del Servicio de Software Zoho CRM

Bases de datos relacionales y el modelo entidad-relación

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

Toda base de datos relacional se basa en dos objetos

Tema: SUBCONSULTAS Y CREACION DE VISTAS.

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

Un nombre de usuario de 30 caracteres o menos, sin caracteres especiales y que inicie con una letra.

Capítulo 5. Cliente-Servidor.

Agradecimiento: A Javier Lomelín Urrea por su dedicación y esmero en este proyecto. Manuel Fernando Guzmán Muñoz Presidente OMIJal

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Guía Para Hacer Una Rápida Instalación de ClientBase

Guía de instalación de la carpeta Datos de IslaWin

Bases de datos y tablas

El control de la tesorería consiste en gestionar desde la aplicación los cobros y pagos generados a partir de las facturas de venta y de compra.

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

GUÍA DE USUARIO: GOOGLE DRIVE

CONSULTAS CON SQL. 3. Hacer clic sobre el botón Nuevo de la ventana de la base de datos. Aparecerá el siguiente cuadro de diálogo.

MANUAL DE AYUDA MODULO TALLAS Y COLORES

GMAIL (avanzado) 1. Accede a la web de Gmail, Te destacamos las funcionalidades que vamos a enseñarte a. 2. Vamos a enseñarte a:

1. DML. Las subconsultas

Backup & Recovery Oracle 9i. Las copias físicas offline, conocidas como Backups en frío, se realizan cuando la Base de Datos está parada.

Curso Excel Básico - Intermedio

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

CAPÍTULO 3 Servidor de Modelo de Usuario

Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?

Sockets y otros objetos orientados a Internet en Delphi.

QUÉ ES UNA BASE DE DATOS Y CUÁLES SON LOS PRINCIPALES TIPOS? EJEMPLOS: MYSQL, SQLSERVER, ORACLE, POSTGRESQL, INFORMIX (DV00204A)

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

Universidad Católica del Táchira Vicerrectorado Académico Coordinación de Educación Virtual. Guia Rapida para Estudiantes

Introducción a las redes de computadores

Manual CMS Mobincube

Estimado usuario. Tabla de Contenidos

Nota: Se puede tener un acceso directo definido o podemos entrar a través de la

Creación de Funciones de Conducción

ADMINISTRACIÓN DE BASE DE DATOS

A- CREAR COPIA FÍSICA Y HEREDAR REGISTRO DE CONFIGURACIÓN

GUIA APLICACIÓN DE SOLICITUDES POR INTERNET. Gestión de Cursos, Certificados de Aptitud Profesional y Tarjetas de Cualificación de Conductores ÍNDICE

GENERACIÓN DE ANTICIPOS DE CRÉDITO

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

Herramienta de Soporte Técnico Online

5- Uso de sentencias avanzadas

Recuperador datos externos

Carrito de Compras. Esta opción dentro de Jazz la podremos utilizar como cualquier otro carrito de compras de una página de Internet.

Sitios remotos. Configurar un Sitio Remoto

Cookies: qué son y para qué sirven

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Copia de Seguridad en windows

Ajustes del Curso en egela (Moodle 2.5)

7. VLSM. IST La Recoleta

Guía de Laboratorio Base de Datos I.

Guía de Apoyo Project Web Access. (Jefe de Proyectos)

Practica creación de tesauros

CAPÍTULO 2 Sistemas De Base De Datos Multiusuarios

Registro: Es un conjunto de campos. También se llama Fila o Tupla. Son varios datos

15 CORREO WEB CORREO WEB

Guí a Ra pida Dropbox.

LiLa Portal Guía para profesores

2. Seleccione OneDrive en la parte superior de los sitios de SharePoint u Office 365 de su organización.

Introducción a la Interacción Humano-Computadora

Manual para usuarios USO DE ONEDRIVE. Universidad Central del Este

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

Transcripción:

Procedimientos Almacenados con InterBase Por Alfonso Ricaño Bringas Los Procedimientos Almacenados son otra característica interesante con la que cuenta InterBase. En este artículo muestro una introducción a ellos. Entre las muchas características que tiene InterBase, una de las más prácticas son los procedimientos almacenados. Los procedimientos almacenados son porciones de código que pueden ser ejecutados exclusivamente en el servidor y que pueden tener parámetros de entrada y de salida. Qué quiere decir esto? Bueno, pues que cuando creamos un procedimiento almacenado éste será ejecutado por InterBase y no por el programa cliente que lo accede. Esto es muy útil sobre todo en arquitecturas cliente/servidor donde tenemos un servidor muy potente el cual podemos aprovechar para ejecutar procesos, consultas y actualizaciones complejas en la base de datos. Ahora bien, en dónde se guardan los procedimientos almacenados? Para responder esta pregunta debemos aclarar que los procedimientos almacenados son un tipo de objeto más de las bases de datos de InterBase. Así como tenemos tablas, vistas, triggers, generadores y excepciones, los procedimientos almacenados son un elemento más que podemos utilizar en una base de datos de InterBase. Así que los procedimientos almacenados se guardan en la misma base de datos, es decir, en el (o los) archivo(s) gdb de InterBase. Tal vez para algunos lectores que no hayan trabajado con manejadores de bases de datos relacionales se les haga extraño que se guarden procedimientos en la base de datos. Pero esto es una práctica común en las bases de datos relacionales de tamaño mayor. Por ejemplo, Oracle, MS SQL Server e Informix entre otras disponen de procedimientos almacenados. Desgraciadamente no hay un estándar para el lenguaje que se utiliza en los procedimientos almacenados, aunque siempre hay similitudes en las implementaciones de estos procedimientos en las distintas bases de datos. Puedo asegurarles que InterBase dispone de uno de los lenguajes más fáciles y potentes para crear procedimientos almacenados. Elementos de los procedimientos almacenados Los procedimientos almacenados están compuestos por algunos de estos elementos: Parámetros de entrada Parámetos de salida Declaración de variables Cuerpo del procedimiento Tanto los parámetros de entrada como los de salida son opcionales. Podemos tener un procedimiento que no tenga parámetros de entrada, pero sí de salida y a la inversa. Como todo buen

programador sabe, los parámetros de entrada sirven para enviarle datos al procedimiento que puede utilizar en sus cálculos. También se pueden obtener datos de otras tablas dentro del procedimiento mediante instrucciones SELECT de SQL. Los parámetros de salida envían al programa cliente que ejecutó el procedimiento el resultado del mismo. Lo interesante es que los parámetros de salida pueden ser enviados en forma de tuplas, lo que nos permite acceder al procedimiento almacenado mediante una instrucción SELECT de SQL y devolviendo una especie de tabla "virtual". Un procedimiento almacenado también se puede ejecutar mediante la instrucción EXECUTE PROCEDURE. Esto lo veremos a detalle más adelante. Dónde utilizarlos? Como mencioné antes, los procedimientos almacenados son muy útiles. A continuación enlisto algunos de los posibles usos que pueden darse a estos objetos de la base de datos. Por ejemplo, si deseamos obtener un reporte complejo que incluya instrucciones condicionales y cálculos complejos con datos obtenidos de varias tablas, un procedimiento almacenado es nuestro mejor aliado. También podemos ejecutar complejos procesos que a veces tardan horas cuando son ejecutados desde el cliente, ya que en tales casos la información debe pasar del servidor al cliente y viceversa. Cuando utilizamos un procedimiento almacenado, éste es ejecutado por InterBase que a su vez es ejecutado en la computadora servidor. Casi siempre las computadoras servidores son poderosas máquinas con mucha memoria, discos rápidos y uno o más procesadores también muy rápidos. Por lo tanto, al ejecutar los procesos mediante procedimientos almacenados estamos aprovechando toda esa capacidad de cómputo disponible en el hardware del servidor. Cómo se crean? Para crear un procedimiento almacenado utilizamos esta sintáxis: CREATE PROCEDURE NOMBRE_PROCEDIMIENTO [(parametro_entrada1 <tipo_de_dato>, parametro_entrada2 <tipo_de_dato>...) ] RETURNS [(parametro_salida1 <tipo_de_dato>, parametro_salida2 <tipo_de_dato>...)] AS [DECLARE VARIABLE var1 <tipo_de_dato>, DECLARE VARIABLE var2 <tipo_de_dato>...] <cuerpo_del_procedimiento> Como se ve, los parámetros de entrada y de salida son opcionales y se pueden poner uno o más en cada tipo de parámetros. Igualmente se pueden utilizar variables internas del procedimiento, mediante la instrucción DECLARE VARIABLE. Estas variables son útiles sobre todo para obtener datos de instrucciones SELECT... INTO. En la sección <cuerpo_del_procedimiento> es donde van todas las instrucciones que ejecutará el procedimiento. A continuación presentaré algunas de las más comunes.

SELECT... INTO Esta instrucción es muy parecida a la instrucción SELECT normal de SQL, con la diferencia de que al final se coloca la instrucción INTO y a continuación de ésta se colocan una serie de variables -que pueden ser de salida o internas- y que deben coincidir en número y tipo de datos con las que se enlistaron después de la instrucción SELECT. Un ejemplo de esta instrucción es: SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER WHERE CITY='Dallas' INTO :CN, :CUST, :CF, :CL; Donde CN, CUST, CF, CL pueden haber sido declaradas mediante DECLARE VARIABLE o también pueden haber sido declaradas como variables de salida. Como mencioné antes, deben ser del mismo tipo y longitud que los campos de la tabla. Nótese cómo se utilizan los dos puntos (:) para indicar que se tratan de variables, ya sean de entrada, salida o internas. Hay que resaltar que el resultado de la consulta debe ser de solamente un registro, en caso contrario marcará un error. FOR SELECT Una vez comprendido cómo funciona la instrucción SELECT INTO, podemos pasar a explicar la instrucción FOR SELECT, sencillamente porque es como un SELECT INTO pero funciona para muchos registros. Veamos este ejemplo: FOR SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER WHERE CITY='Dallas' INTO :CN, :CUST, :CF, :CL DO SUSP; Veamos las diferencias. Para empezar se coloca la instrucción FOR antes del SELECT, y se termina con la instrucción DO. La instrucción o bloque de instrucciones -como en este ejemplo- que se coloque después de DO será repetido tantas veces como registros arroje la consulta. Las variables (:CN, :CUST, :CF y :CL) irán obteniendo los valores de los campos de la consulta en cada registro. Si colocamos un bloque -como en este ejemplo- mediante las instrucciones.. podemos hacer cálculos, concatenaciones, asignaciones y anidaciones de otras instrucciones dentro del bloque. Finalmente, la instrucción SUSP -que es opcional- envía un registro de salida del procedimiento con las variables de salida. Este ejemplo funcionará correctamente si las variables son declaradas como variables de salida, por lo que el procedimiento retornará el resultado de la consulta SELECT del FOR.

Un ejemplo Para ilustrar mejor la creación de un procedimiento almacenado, vamos a crear uno en el siguiente ejemplo. Vamos a utilizar la base de datos EMPLOYEE que viene con InterBase. En este ejemplo utilizaremos la tabla CUSTOMER, y vamos a concatenar los campos CONTACT_FIRST y CONTACT_LAST en un solo campo llamado CONTACT_NAME. También seleccionaremos solamente aquellos registros donde el campo COUNTRY (País) sea Estados Unidos (USA). Esta es la instrucción para crear el procedimiento almacenado: CREATE PROCEDURE CUSTOMER_PROC RETURNS (CN INTEGER, CUSTOMER VARCHAR(25), CONTACT_NAME VARCHAR(36)) AS DECLARE VARIABLE CF VARCHAR(15); DECLARE VARIABLE CL VARCHAR(20); DECLARE VARIABLE CNAME VARCHAR(36); FOR SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER WHERE COUNTRY='USA' INTO :CN, :CUSTOMER, :CF, :CL DO CNAME = :CF ' ' :CL; CONTACT_NAME = :CNAME; SUSP; Como se aprecia en el listado anterior, se realiza la consulta y se colocan los valores en las variable CN, CUSTOMER, CF y CL. De estas variables, CN y CUSTOMER son parámetros de salida, mientras que CF y CL son variables internas. Después se asigna a la variable interna CNAME la concatenación de las variables CF y CL y un espacio entre ellas. Nótese cómo las variables a las que se asignará un valor -las que están a la izquierda del signo igual- no necesitan los dos puntos. Finalmente se asigna al parámetro de salida CONTACT_NAME el valor de la variable CNAME y se ejecuta la instrucción SUSP, lo cual hace que el procedimiento envíe los valores de los parámetros de salida como los campos de una tabla virtual. Ejecutando el procedimiento Hay dos maneras de ejecutar el procedimiento. Una es mediante la instrucción EXECUTE PROCEDURE y la otra es llamándolo como si fuera una tabla, es decir, mediante una instrucción SELECT. Cuando utilizamos EXECUTE PROCEDURE, especificamos los parámetros de entrada del procedimiento como una lista de variables y sin paréntesis. Los parámetros de salida del procedimiento deben indicarse utilizando las instrucción RETURNING_VALUES. Vamos a ver un ejemplo de cómo llamar el procedimiento anterior. EXECUTE PROCEDURE CUSTOMER_PROC RETURNING_VALUES :CUSTNO, :CUSTOMER, :CONT_NAME; Este tipo de llamada a procedimientos se utiliza generalmente dentro de otros procedimientos o triggers, ya que deben de declararse previamente las variables. En el caso de utilizar la instrucción SELECT, simplemente se llama como si fuera una tabla más de la base de datos. Por ejemplo:

SELECT * FROM CUSTOMER_PROC; En este caso, el procedimiento no tiene parámetros de entrada, si los tuviera, deben especificarse a continuación del nombre del procedimiento y entre paréntesis. Vamos a modificar el procedimiento anterior mediante la instrucción ALTER PROCEDURE para que podamos enviarle como parámetro el país para la condición de la consulta: ALTER PROCEDURE CUSTOMER_PROC (COUNTRY VARCHAR(15)) RETURNS (CN INTEGER, CUSTOMER VARCHAR(25), CONTACT_NAME VARCHAR(36)) AS DECLARE VARIABLE CF VARCHAR(15); DECLARE VARIABLE CL VARCHAR(20); DECLARE VARIABLE CNAME VARCHAR(36); FOR SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER WHERE COUNTRY=:COUNTRY INTO :CN, :CUSTOMER, :CF, :CL DO CNAME = :CF ' ' :CL; CONTACT_NAME = :CNAME; SUSP; Una vez ejecutada la modificación del procedimiento, podemos hacer una consulta mediante select: SELECT * FROM CUSTOMER_PROC('USA'); Y obtenemos el siguiente resultado: C:\Archivos de programa\borland\interbase\bin>isql Use CONNECT or CREATE DATABASE to specify a database SQL> connect..\examples\database\employee.gdb user SYSDBA password masterkey; Database:..\examples\database\employee.gdb, User: SYSDBA SQL> select * from customer_proc('usa'); CN CUSTOMER CONTACT_NAME ============ ========================= ==================================== SQL> 1001 Signature Design Dale J. Little 1002 Dallas Technologies Glen Brown 1003 Buttle, Griffith and Co. James Buttle 1007 Mrs. Beauvais <null> 1008 Anini Vacation Rentals Leilani Briggs donde obtenemos los clientes de Estados Unidos, aunque también podemos obtener de otros países, como Japón: SQL> select * from customer_proc('japan'); CN CUSTOMER CONTACT_NAME ============ ========================= ==================================== 1010 MPM Corporation Miwako Miyamoto SQL>

Conclusiones Los procedimientos almacenados permiten aprovechar los recursos del servidor, ahorrar tiempo creando consultas complejas desde el servidor y permiten interactuar con otros objetos de InterBase -triggers, generadores, excepciones, tablas y vistas-. Por lo tanto, es importante para todo desarrollador que utilice InterBase el utilizarlos correctamente y saber todo lo que se puede hacer con ellos. Este artículo fue una mera introducción a los procedimientos y no fueron cubiertas todas sus opciones y posibilidades, pero como tal, pretendió dar un vistazo rápido a las potencialidades de estos objetos sin confundir al lector con un mundo de opciones y posibilidades. En próximas entregas veremos cómo acceder a los procedimientos almacenados desde Delphi y C++ Builder. Hasta la próxima.