SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexió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>...]
BEGIN
<cuerpo_del_procedimiento>
END
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
BEGIN
SUSPEND;
END
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 BEGIN..END
podemos hacer cálculos, concatenaciones, asignaciones y anidaciones de otras instrucciones dentro
del bloque.
Finalmente, la instrucción SUSPEND -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);
BEGIN
FOR SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER
WHERE COUNTRY='USA'
INTO :CN, :CUSTOMER, :CF, :CL DO
BEGIN
CNAME = :CF||' '||:CL;
CONTACT_NAME = :CNAME;
SUSPEND;
END
END
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 SUSPEND, 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);
BEGIN
FOR SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER
WHERE COUNTRY=:COUNTRY
INTO :CN, :CUSTOMER, :CF, :CL DO
BEGIN
CNAME = :CF||' '||:CL;
CONTACT_NAME = :CNAME;
SUSPEND;
END
END
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 programaBorlandInterBasebin>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect ..examplesdatabaseemployee.gdb user SYSDBA password masterkey;
Database: ..examplesdatabaseemployee.gdb, User: SYSDBA
SQL> select * from customer_proc('USA');
CN CUSTOMER CONTACT_NAME
============ ========================= ====================================
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
SQL>
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.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM   TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
TRANSACCIONES, TRIGGERS, PROCEDIMIENTOS ALMACENADOS: DB2/IBM
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
9. Uso De Procedimientos Almacenados
9.  Uso De Procedimientos Almacenados9.  Uso De Procedimientos Almacenados
9. Uso De Procedimientos Almacenados
 
Teoria procedimientos almacenados
Teoria procedimientos almacenadosTeoria procedimientos almacenados
Teoria procedimientos almacenados
 
Qué es SQL
Qué es SQL Qué es SQL
Qué es SQL
 
Disparadores 1213820550525607-9
Disparadores 1213820550525607-9Disparadores 1213820550525607-9
Disparadores 1213820550525607-9
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
 
Sql Procedural
Sql ProceduralSql Procedural
Sql Procedural
 
TRANSACT-SQL
TRANSACT-SQLTRANSACT-SQL
TRANSACT-SQL
 
Lenguaje Transact sql
Lenguaje Transact sqlLenguaje Transact sql
Lenguaje Transact sql
 
Dfd
DfdDfd
Dfd
 
estructura_de_un_programa_en_lenguaje_ensamblador
estructura_de_un_programa_en_lenguaje_ensambladorestructura_de_un_programa_en_lenguaje_ensamblador
estructura_de_un_programa_en_lenguaje_ensamblador
 
Disparadores - base de datos
Disparadores - base de datosDisparadores - base de datos
Disparadores - base de datos
 
Sesión11 - Paquetes (Oracle)
Sesión11 - Paquetes (Oracle)Sesión11 - Paquetes (Oracle)
Sesión11 - Paquetes (Oracle)
 
PROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOSPROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOS
 
Ms SQL Server
Ms SQL ServerMs SQL Server
Ms SQL Server
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 

Destacado

Porcentaje y probabilidad
Porcentaje y probabilidadPorcentaje y probabilidad
Porcentaje y probabilidadIsa SB
 
Bledsoe v1 ch03_lecture
Bledsoe v1 ch03_lectureBledsoe v1 ch03_lecture
Bledsoe v1 ch03_lectureAllen Welch
 
La ventaja del líder del mercado (hbr)
La ventaja del líder del mercado (hbr)La ventaja del líder del mercado (hbr)
La ventaja del líder del mercado (hbr)Ivan (Huanuco)
 
La organización de los espacios y los tiempos en primaria
La organización de los espacios y los tiempos en primariaLa organización de los espacios y los tiempos en primaria
La organización de los espacios y los tiempos en primariaangelronco93
 
Formato unico Hoja vida
Formato unico Hoja vida Formato unico Hoja vida
Formato unico Hoja vida Harold Perez
 
Voltage Group Automation S
Voltage Group Automation SVoltage Group Automation S
Voltage Group Automation SElisa Elblanc
 
Os fósseis
Os fósseisOs fósseis
Os fósseisMINEDU
 
AS Lead to Cash Highlevel Process FlowWIP
AS Lead to Cash Highlevel Process FlowWIPAS Lead to Cash Highlevel Process FlowWIP
AS Lead to Cash Highlevel Process FlowWIPJuliann Hendon
 
Unilever (AXE AND DOVE ) Case Study
Unilever (AXE AND DOVE ) Case StudyUnilever (AXE AND DOVE ) Case Study
Unilever (AXE AND DOVE ) Case StudyAjinkya Pujari
 
Voltage Group. Company Profile
Voltage Group. Company ProfileVoltage Group. Company Profile
Voltage Group. Company ProfileElisa Elblanc
 

Destacado (15)

Porcentaje y probabilidad
Porcentaje y probabilidadPorcentaje y probabilidad
Porcentaje y probabilidad
 
Banco de piel dispositivos
Banco de piel dispositivosBanco de piel dispositivos
Banco de piel dispositivos
 
Bledsoe v1 ch03_lecture
Bledsoe v1 ch03_lectureBledsoe v1 ch03_lecture
Bledsoe v1 ch03_lecture
 
La ventaja del líder del mercado (hbr)
La ventaja del líder del mercado (hbr)La ventaja del líder del mercado (hbr)
La ventaja del líder del mercado (hbr)
 
6 клас урок 6
6 клас урок 66 клас урок 6
6 клас урок 6
 
La organización de los espacios y los tiempos en primaria
La organización de los espacios y los tiempos en primariaLa organización de los espacios y los tiempos en primaria
La organización de los espacios y los tiempos en primaria
 
Formato unico Hoja vida
Formato unico Hoja vida Formato unico Hoja vida
Formato unico Hoja vida
 
Codigo transito
Codigo transitoCodigo transito
Codigo transito
 
Alex flores
Alex floresAlex flores
Alex flores
 
Voltage Group Automation S
Voltage Group Automation SVoltage Group Automation S
Voltage Group Automation S
 
ant tooling
ant toolingant tooling
ant tooling
 
Os fósseis
Os fósseisOs fósseis
Os fósseis
 
AS Lead to Cash Highlevel Process FlowWIP
AS Lead to Cash Highlevel Process FlowWIPAS Lead to Cash Highlevel Process FlowWIP
AS Lead to Cash Highlevel Process FlowWIP
 
Unilever (AXE AND DOVE ) Case Study
Unilever (AXE AND DOVE ) Case StudyUnilever (AXE AND DOVE ) Case Study
Unilever (AXE AND DOVE ) Case Study
 
Voltage Group. Company Profile
Voltage Group. Company ProfileVoltage Group. Company Profile
Voltage Group. Company Profile
 

Similar a Procedimientos almacenados

7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Programación con C/AL para Microsoft Business Solutions Navision
Programación con C/AL para Microsoft Business Solutions NavisionProgramación con C/AL para Microsoft Business Solutions Navision
Programación con C/AL para Microsoft Business Solutions Navisionpabloesp
 
Lenguaje de simulacion
Lenguaje de simulacionLenguaje de simulacion
Lenguaje de simulacionlilijessica
 
Manual completo-sql5
Manual completo-sql5Manual completo-sql5
Manual completo-sql5Roberto Rojas
 
Afinamientodebasesdedatosyservidoreswebs
AfinamientodebasesdedatosyservidoreswebsAfinamientodebasesdedatosyservidoreswebs
Afinamientodebasesdedatosyservidoreswebsricardosusa5
 
Cliente servidor
Cliente servidorCliente servidor
Cliente servidorCincoC
 
13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docxLeydyVeronicaDelgado
 
13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docxLeydyVeronicaDelgado
 
Estructuras repetitivas-dayana-y-ana
Estructuras repetitivas-dayana-y-anaEstructuras repetitivas-dayana-y-ana
Estructuras repetitivas-dayana-y-anaDayana Hernandez
 
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datosNathaly Arias
 

Similar a Procedimientos almacenados (20)

7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
SESION 05.pdf
SESION 05.pdfSESION 05.pdf
SESION 05.pdf
 
Programación con C/AL para Microsoft Business Solutions Navision
Programación con C/AL para Microsoft Business Solutions NavisionProgramación con C/AL para Microsoft Business Solutions Navision
Programación con C/AL para Microsoft Business Solutions Navision
 
statement
statementstatement
statement
 
Lenguaje de simulacion
Lenguaje de simulacionLenguaje de simulacion
Lenguaje de simulacion
 
Manual completo-sql
Manual completo-sqlManual completo-sql
Manual completo-sql
 
Manual completo-sql5
Manual completo-sql5Manual completo-sql5
Manual completo-sql5
 
Winshuttle easy alternativetolsmw-whitepaper-es
Winshuttle easy alternativetolsmw-whitepaper-esWinshuttle easy alternativetolsmw-whitepaper-es
Winshuttle easy alternativetolsmw-whitepaper-es
 
Afinamientodebasesdedatosyservidoreswebs
AfinamientodebasesdedatosyservidoreswebsAfinamientodebasesdedatosyservidoreswebs
Afinamientodebasesdedatosyservidoreswebs
 
Cliente servidor
Cliente servidorCliente servidor
Cliente servidor
 
PROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOSPROCEDIMIENTOS ALMACENADOS
PROCEDIMIENTOS ALMACENADOS
 
103305862 t-sql
103305862 t-sql103305862 t-sql
103305862 t-sql
 
t-sql
t-sqlt-sql
t-sql
 
13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx13 Guía_Fundamentos de Base de Datos.docx
13 Guía_Fundamentos de Base de Datos.docx
 
13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx13 Guía_Fundamentos de Base de Datos (1).docx
13 Guía_Fundamentos de Base de Datos (1).docx
 
Estructuras repetitivas-dayana-y-ana
Estructuras repetitivas-dayana-y-anaEstructuras repetitivas-dayana-y-ana
Estructuras repetitivas-dayana-y-ana
 
Introdução a abap
Introdução a abapIntrodução a abap
Introdução a abap
 
Sentencia select
Sentencia selectSentencia select
Sentencia select
 
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
4 establecer-procesos-para-la-manipulacion-de-la-base-de-datos
 
TEMAS DE UNIDAD 4
TEMAS DE UNIDAD 4TEMAS DE UNIDAD 4
TEMAS DE UNIDAD 4
 

Último

CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESJHONJAIROVENTURASAUC
 
Mecatronica Automotriz .pdf
Mecatronica Automotriz              .pdfMecatronica Automotriz              .pdf
Mecatronica Automotriz .pdfleonardocahua1
 
Instrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdfInstrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdfElybe Hernandez
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalaciónQualityAdviceService
 
entropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemasentropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemasDerlyValeriaRodrigue
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potableFabricioMogroMantill
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosandersonsubero28
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEduardoBriones22
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoGualbertoLopez2
 
docsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbanadocsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbanaArnolVillalobos
 
680186431-3-Porcentaje-Presentacion-2022.pdf
680186431-3-Porcentaje-Presentacion-2022.pdf680186431-3-Porcentaje-Presentacion-2022.pdf
680186431-3-Porcentaje-Presentacion-2022.pdfGISELMELODYLOPEZMAMA
 
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptxrorellanoq
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTElisaLen4
 
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICOATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICOalejandrocrisostomo2
 
metodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasmetodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasGraciaMatute1
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientoscuentaparainvestigac
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfELIZABETHCRUZVALENCI
 
Mantenimiento-de-Transformadores-Monofasicos[1].pptx
Mantenimiento-de-Transformadores-Monofasicos[1].pptxMantenimiento-de-Transformadores-Monofasicos[1].pptx
Mantenimiento-de-Transformadores-Monofasicos[1].pptxJasserGonzalez2
 
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptxG4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptxMaxPercyBorjaVillanu
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricasurAN077
 

Último (20)

CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALESCAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
CAPACITACIÓN EN AGUA Y SANEAMIENTO EN ZONAS RURALES
 
Mecatronica Automotriz .pdf
Mecatronica Automotriz              .pdfMecatronica Automotriz              .pdf
Mecatronica Automotriz .pdf
 
Instrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdfInstrumentacion para el control de procesos.pdf
Instrumentacion para el control de procesos.pdf
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
entropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemasentropia y neguentropia en la teoria general de sistemas
entropia y neguentropia en la teoria general de sistemas
 
Presentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potablePresentación de Redes de alcantarillado y agua potable
Presentación de Redes de alcantarillado y agua potable
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
Balance materia y energia procesos de Secado
Balance materia y energia procesos de SecadoBalance materia y energia procesos de Secado
Balance materia y energia procesos de Secado
 
docsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbanadocsity-manzaneo-y-lotizacion para habilitacopm urbana
docsity-manzaneo-y-lotizacion para habilitacopm urbana
 
680186431-3-Porcentaje-Presentacion-2022.pdf
680186431-3-Porcentaje-Presentacion-2022.pdf680186431-3-Porcentaje-Presentacion-2022.pdf
680186431-3-Porcentaje-Presentacion-2022.pdf
 
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
8 2024A CONDUCCION DE CALOR EN REGIMEN TRANSITORIO.pptx
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICOATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
ATS-FORMATOa.pdf PARA MANTENIMIENTO MECANICO
 
metodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasmetodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantas
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientos
 
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdfNTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
NTC 3883 análisis sensorial. metodología. prueba duo-trio.pdf
 
Mantenimiento-de-Transformadores-Monofasicos[1].pptx
Mantenimiento-de-Transformadores-Monofasicos[1].pptxMantenimiento-de-Transformadores-Monofasicos[1].pptx
Mantenimiento-de-Transformadores-Monofasicos[1].pptx
 
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptxG4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
G4 - CASO DE ESTUDIO - VOLUMEN DE UN RESERVORIO (1).pptx
 
1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas1. Equipos Primarios de una Subestaciones electricas
1. Equipos Primarios de una Subestaciones electricas
 

Procedimientos almacenados

  • 1. 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
  • 2. 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>...] BEGIN <cuerpo_del_procedimiento> END 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.
  • 3. 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 BEGIN SUSPEND; END 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 BEGIN..END podemos hacer cálculos, concatenaciones, asignaciones y anidaciones de otras instrucciones dentro del bloque. Finalmente, la instrucción SUSPEND -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.
  • 4. 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); BEGIN FOR SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER WHERE COUNTRY='USA' INTO :CN, :CUSTOMER, :CF, :CL DO BEGIN CNAME = :CF||' '||:CL; CONTACT_NAME = :CNAME; SUSPEND; END END 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 SUSPEND, 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:
  • 5. 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); BEGIN FOR SELECT CUST_NO, CUSTOMER, CONTACT_FIRST, CONTACT_LAST FROM CUSTOMER WHERE COUNTRY=:COUNTRY INTO :CN, :CUSTOMER, :CF, :CL DO BEGIN CNAME = :CF||' '||:CL; CONTACT_NAME = :CNAME; SUSPEND; END END 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 programaBorlandInterBasebin>isql Use CONNECT or CREATE DATABASE to specify a database SQL> connect ..examplesdatabaseemployee.gdb user SYSDBA password masterkey; Database: ..examplesdatabaseemployee.gdb, User: SYSDBA SQL> select * from customer_proc('USA'); CN CUSTOMER CONTACT_NAME ============ ========================= ==================================== 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 SQL> 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>
  • 6. 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.