Está en la página 1de 11

UNIVERSIDAD POLITÉCNICA DE TULANCINGO

Procedimientos y funciones

por

Eduardo Santos Lira

Ingeniería en Sistemas Computacionales

U Asignatura:

Administración De Base De Datos

P Nombre del Catedrático:

Juan Martin Hernández Ramirez

T
Sexto Cuatrimestre

Tulancingo de Bravo, Hidalgo

ISC 61

Mayo - Agosto 2022


Contenido
¿Qué es un procedimiento almacenado en SQL? ...................................................................... 0
Tipos de Procedimientos almacenados .................................................................................... 1
¿Cómo se realiza un procedimiento en SQL? ............................................................................. 2
¿Cómo se ejecuta un procedimiento en SQL?............................................................................ 5
¿Cuál es la diferencia entre un procedimiento y una función? .............................................. 6
¿Cómo se hace una función en SQL? ........................................................................................... 6
Ejemplo de uso ................................................................................................................................ 7
¿Cómo se ejecuta una función en SQL? ...................................................................................... 8
Ejemplo de uso ................................................................................................................................ 8

1
¿Qué es un procedimiento almacenado en SQL?
Un procedimiento almacenado de SQL Server es un grupo de una o más instrucciones
Transact-SQL o una referencia a un método de Common Runtime Language (CLR) de
Microsoft .NET Framework. Los procedimientos se asemejan a las construcciones de
otros lenguajes de programación

Pueden:

Aceptar parámetros de entrada y devolver varios valores en forma de


parámetros de salida al programa que realiza la llamada.
Contener instrucciones de programación que realicen operaciones en la base
de datos. Entre otras, pueden contener llamadas a otros procedimientos.
Devolver un valor de estado a un programa que realiza una llamada para indicar
si la operación se ha realizado correctamente o se han producido errores, y el
motivo de estos.

Ventajas:

▪ Tráfico de red reducido entre el cliente y el servidor:


o Los comandos de un procedimiento se ejecutan en un único lote de código. Esto
puede reducir significativamente el tráfico de red entre el servidor y el cliente
porque únicamente se envía a través de la red la llamada que va a ejecutar el
procedimiento. Sin la encapsulación de código que proporciona un procedimiento
(cada una de las líneas de código tendría que enviarse a través de la red).
▪ Mayor seguridad:
o Varios usuarios y programas cliente pueden realizar operaciones en los objetos
de base de datos subyacentes a través de un procedimiento, sin necesidad de
que los usuarios y los programas no tengan permisos directos sobre esos objetos.
o El procedimiento controla qué procesos y actividades se llevan a cabo y protege
los objetos de base de datos subyacentes. Esto elimina la necesidad de conceder
permisos en cada nivel de objetos y simplifica los niveles de seguridad.
o La cláusula execute as puede especificarse en la instrucción create procedure
para habilitar la suplantación de otro usuario o para permitir que los usuarios o
las aplicaciones puedan realizar ciertas actividades en la base de datos sin
necesidad de contar con permisos directos sobre los objetos y comandos
subyacentes.
• Por ejemplo, algunas acciones como truncate table no tienen permisos que se
puedan conceder. Para poder ejecutar truncate table, el usuario debe tener
permisos alter en la tabla especificada. Puede que la concesión de permisos
alter a un usuario en una tabla no sea lo ideal, pues en realidad el usuario
tendrá permisos muy superiores a la posibilidad de truncar una tabla.
• Si se incorpora la instrucción truncate table en un módulo y se especifica la
ejecución del módulo como un usuario con permisos para modificar la tabla,
se pueden ampliar los permisos para truncar la tabla al usuario al que se
concedan permisos execute para el módulo.
o Al llamar a un procedimiento a través de la red, solo está visible la llamada que
va a ejecutar el procedimiento. Por lo tanto, los usuarios malintencionados no
pueden ver los nombres de los objetos de base de datos y tabla, incrustados en
sus propias instrucciones transact-sql, ni buscar datos críticos
o El uso de parámetros de procedimientos ayuda a protegerse contra ataques por
inyección de código sql. Dado que la entrada de parámetros se trata como un
valor literal y no como código ejecutable, resulta más difícil para un atacante
insertar un comando en la instrucción transact-sql del procedimiento y
comprometer la seguridad.

Tipos de Procedimientos almacenados


Definidos por el usuario: Un procedimiento definido por el usuario se puede crear
en una base de datos definida por el usuario o en todas las bases de datos del
sistema excepto en la base de datos Resource. El procedimiento se puede
desarrollar en Transact-SQL o como una referencia a un método de Common
Runtime Language (CLR) de Microsoft .NET Framework.
Temporales: Los procedimientos temporales son una forma de procedimientos
definidos por el usuario. Los procedimientos temporales son iguales que los
procedimientos permanentes salvo porque se almacenan en tempdb. Hay dos tipos
de procedimientos temporales: locales y globales. Se diferencian entre sí por los
nombres, la visibilidad y la disponibilidad. Los procedimientos temporales locales
tienen como primer carácter de sus nombres un solo signo de número (#); solo son
visibles en la conexión actual del usuario y se eliminan cuando se cierra la conexión.
Los procedimientos temporales globales presentan dos signos de número (##)
antes del nombre; son visibles para cualquier usuario después de su creación y se
eliminan al final de la última sesión en la que se usa el procedimiento.
Sistema: Los procedimientos del sistema se incluyen con SQL Server. Están
almacenados físicamente en la base de datos interna y oculta Resource y se
muestran de forma lógica en el esquema sys de cada base de datos definida por el
sistema y por el usuario. Además, la base de datos msdb también contiene
procedimientos almacenados del sistema en el esquema dbo que se usan para
programar alertas y trabajos. Dado que los procedimientos del sistema empiezan
con el prefijo sp, le recomendamos que no use este prefijo cuando asigne un nombre
a los procedimientos definidos por el usuario. Para obtener una lista completa de
los procedimientos del sistema, vea Procedimientos almacenados del sistema
(Transact-SQL)

1
SQL Server admite los procedimientos del sistema que proporcionan una interfaz
de SQL Server a los programas externos para varias actividades de mantenimiento.
Estos procedimientos extendidos usan el prefijo xp. Para obtener una lista completa
de los procedimientos extendidos, vea Procedimientos almacenados extendidos
generales (Transact-SQL).
Extendidos definidos por el usuario: Los procedimientos extendidos le permiten
crear sus propias rutinas externas en un lenguaje de programación como puede ser
C. Estos procedimientos son DLL que una instancia de SQL Server puede cargar y
ejecutar dinámicamente.

¿Cómo se realiza un procedimiento en SQL?


Este procedimiento almacenado simple ofrece información de empleados procedente
de la tabla EMP_EMPLOYEE_DIM cuando el ID de la organización del empleado
coincide con un valor que el usuario haya entrado.

En el asistente se selecciona una plantilla que se emplea como base para el código en
el procedimiento almacenado. Se crea la plantilla para seleccionarla en el asistente.
Para un simple procedimiento almacenado, por lo general utilizaría una de las plantillas
básicas. No obstante, puede crear una plantilla para familiarizarse con el proceso de
creación de plantillas.

Cuando se crea una rutina en el entorno de trabajo, se guarda el código fuente en el


entorno de trabajo del proyecto.

Como crear un procedimiento almacenado SQL:

Cree una plantilla a partir de una plantilla existente.


Pulse en Ventana > Preferencias. Aparece la ventana Preferencias.
Expanda Gestión de datos > Desarrollo de SQL > Rutinas, y pulse Plantillas.
En la página Plantillas, desplácese hasta ver la primera plantilla con el contexto
db2luw_sp_sql. El nombre de esta plantilla es "Custom: You supply the SQL, return
a result set." ("Personalizada: El usuario proporciona el SQL y se devuelve un
conjunto de resultados.")
Pulse en la plantilla y luego en Editar. Aparece la ventana Editar plantilla.
Sustituya el nombre de la plantilla actual por el texto siguiente: GSDB4tutorial:
sentencia SEARCH de empleado básica.
Sustituya la descripción de la plantilla actual por el texto siguiente: Devolver ID,
nombre y organización de todos los empleados en la tabla EMP_EMPLOYEE_DIM.
En el patrón, elimine todas las líneas de comentarios que están enlazadas por las
dos líneas de comentarios con signos numéricos (-- #################).

2
Sustituya [Your SQL to execute goes here] por la siguiente sentencia SQL:

SELECT EMPLOYEE_CODE, FIRST_NAME,

LAST_NAME, ORGANIZATION_CODE

FROM EMP_EMPLOYEE_DIM;

• La plantilla terminada contiene la información siguiente:

• Pulse en Aceptar en la ventana Editar plantilla. Un recuadro de mensaje le pide


que indique si desea crear una plantilla adicional con el nuevo nombre, o bien
cambiar el nombre de la plantilla actual.
• Pulse en Sí para crear la nueva plantilla. La plantilla se añadirá a la lista
mostrada en la página Plantillas.
• Pulse en Aceptar en la ventana Preferencias
En la vista Explorador de proyectos de datos, expanda el proyecto SPDevelopment
para buscar la carpeta Procedimientos almacenados.
Pulse con el botón derecho del ratón sobre la carpeta Procedimientos almacenados
y seleccione Nuevo > Procedimiento almacenado. Se abrirá el asistente
Procedimiento almacenado nuevo.
En el campo Nombre, escriba SPEmployee.
En el campo Idioma, seleccione SQL.
Seleccione la plantilla GSDB4tutorial: sentencia SEARCH de empleado básica, y
pulse en Finalizar. El asistente se cierra y el procedimiento almacenado se abre en
el editor de rutinas, donde puede ver y editar el código de origen
En este punto, si ha guardado, desplegado y ejecutado el procedimiento
almacenado, los resultados mostrarían todos los empleados de la tabla. No
obstante, deseamos limitar los resultados solamente a aquellos empleados que
están en la organización 018.

3
En el editor, realice las acciones siguientes:
• Añada el parámetro de entrada org en la declaración del procedimiento, de
manera que quede así:
CREATE PROCEDURE SPEmployee ( IN org CHAR(6) )
• Elimine el punto y coma que sigue a EMP_EMPLOYEE_DIM.
• Inserte la siguiente cláusula de condición:
WHERE ORGANIZATION_CODE = org;
El procedimiento almacenado terminado contiene el código siguiente:

CREATE PROCEDURE SPEmployee ( IN org CHAR(6) )

DYNAMIC RESULT SETS 1

P1: BEGIN

-- Declarar cursor

DECLARE cursor1 CURSOR WITH RETURN for

SELECT EMPLOYEE_CODE, FIRST_NAME,

LAST_NAME, ORGANIZATION_CODE

FROM EMP_EMPLOYEE_DIM

WHERE ORGANIZATION_CODE = org;

-- El cursor se ha dejado abierto para la aplicación del cliente

OPEN cursor1;

END P1

Guarde el procedimiento almacenado y luego cierre el editor de rutinas.

4
¿Cómo se ejecuta un procedimiento en SQL?
El procedimiento se ejecuta colocando "execute" (o "exec") seguido del nombre del
procedimiento y los valores para los parámetros separados por comas:

exec pa_libros_autor_editorial 'Richard Bach','Planeta';

Los valores de un parámetro pueden pasarse al procedimiento mediante el nombre del


parámetro o por su posición.

Esa sintaxis ejecuta el procedimiento pasando valores a los parámetros por posición.
También podemos emplear la otra sintaxis en la cual pasamos valores a los
parámetros por su nombre:

exec pa_libros_autor_editorial @editorial='Planeta', @autor='Richard Bach';

• Cuando pasamos valores con el nombre del parámetro, el orden en que se colocan
puede alterarse.

Si queremos ejecutar un procedimiento que permita omitir los valores para los
parámetros debemos, al crear el procedimiento, definir valores por defecto para cada
parámetro:

create procedure pa_libros_autor_editorial2

@autor varchar(30)='Richard Bach',

@editorial varchar(20)='Planeta'

as

select titulo, autor,editorial,precio

from libros

where autor= @autor and

editorial=@editorial;

5
¿Cuál es la diferencia entre un procedimiento y una función?
Una función devuelve un valor

Un procedimiento simplemente ejecuta comandos.

La función del nombre proviene de las matemáticas. Se utiliza para calcular un valor
basado en la entrada.

Un procedimiento es un conjunto de comandos que puede ejecutarse en orden.

En la mayoría de los lenguajes de programación, incluso las funciones pueden tener


un conjunto de comandos

la diferencia es solo en la devolución de una parte de valor.

Pero si desea mantener una función limpia (solo observe los lenguajes funcionales),
debe asegurarse de que la función no tenga un efecto secundario.

¿Cómo se hace una función en SQL?


Como todas las funciones, se crean con la instrucción "create function"

La sintaxis básica es:

create function NOMBRE

(@PARAMETRO TIPO=VALORPORDEFECTO)

returns TIPO

begin

INSTRUCCIONES

return VALOR

end;

Luego del nombre se colocan (opcionalmente) los parámetros de entrada con su tipo.

La cláusula "returns" indica el tipo de dato retornado.

El cuerpo de la función, se define en un bloque "begin...end" que contiene las


instrucciones que retornan el valor. El tipo del valor retornado puede ser de cualquier
tipo, excepto text, ntext, image, cursor o timestamp.

6
Ejemplo de uso
Creamos una función a la cual le enviamos una fecha y nos retorna el nombre del mes
en español:

7
¿Cómo se ejecuta una función en SQL?
El método execute, a veces abreviado como exec, permite solicitar la ejecución de
procedimientos almacenados.

El método execute acepta como argumento una cadena de caracteres y la ejecuta


sobre el motor de base de datos.

Esta funcionalidad permite evitar un problema que a veces aparece al diseñar scripts
Transact SQL, procedimientos o funciones, que es cómo construir de manera dinámica
una consulta. Es sencillo dar valor a los diferentes argumentos de la consulta. Este no
es el caso cuando se construye la consulta en función del valor o la presencia de
algunos argumentos.

El método EXECUTE permite construir una cadena de caracteres en formato de


cadena de caracteres y después solicitar la ejecución de la consulta que se genera de
esa manera. Por el contrario, esta funcionalidad tiene el inconveniente de facilitar los
ataques mediante inyección de código SQL.

Para evitar este tipo de problemas, es necesario que el desarrollador no ejecute una
consulta o una fracción de consulta directamente introducida por el usuario sin que
haya pasado los controles necesarios para asegurar que este código no contiene
ningún ataque SQL.

Sintaxis

Execute 'cadenaCaracteres

Execute nombreProcedimiento [[@nombreArgumento=]valor, ...]

Ejemplo de uso

La instrucción execute también permite presentar correctamente los valores devueltos


por un procedimiento...

También podría gustarte