Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contenido
Programacin en Bloques
Programacin en Bloques
Extensin del SQL Standard que guarda las caractersticas de diseo de los lenguajes de programacin. Los bloques de cdigo se conocen como scripts y pueden ser: 1. nombrados 2. no nombrados. Incluyen sentencias tipo DML y en algunos DBMS ciertas sentencias tipo DDL y DCL (estas ltimas son restringidas). En oracle se denomina PL/SQL: Procedural Language.
PROCEDURES FUNCTIONS
TRIGGERS
PACKAGES (ORACLE)
DBMS
DBMS
Programacin en Bloque
Los programas SQL pueden ejecutarse desde el Cliente desde el Servidor:
Cliente (client side) los procedimientos y funciones se ejecutan en el cliente e interaccionan con el servidor mediante queries. Servidor (server side) los procedimientos y funciones se almacenan en el servidor y son invocadas desde el cliente.
Bloque Nombrado
Procedimientos Almacenados
Coleccin de sentencias SQL como si se tratase de un lenguaje estructurado (C, Pascal, ... ). Es decir: es posible llamarlo mediante un identificador, puede recibir argumentos y devolver un valor de retorno. Ejemplo:
EXEC CALCULA_LIQUIDAC (@numEmp, @Ini, @Fin)
Procedimientos Almacenados
Se crea, se compila y se almacena de manera normalizada en una tabla del sistema.
Las siguientes ejecuciones del SP son rpidas, porque: - Ya est normalizado - Ya est compilado y optimizado
El proceso optimizado se mantiene en memoria para posteriores ejecuciones (ahorro adicional de tiempo y recurso).
Creacin de un PROCEDURE
Para crear un PROCEDURE (procedimientos almacenado) tanto en SQL Server como en Oracle se puede utilizar la consola del Editor de Consultas, la consola del Enterprise
Manejo de parmetros
Procedimiento
entorno de llamada
Modo de parmetros
IN
Por Defecto Valor que se pasa al Subprograma
OUT
Tiene que especif. Devuelve al entorno de llamada
IN OUT
Tiene que especif. Valor que se pasa al Subprograma; Devuelve al ent. de llamada Variable Inicializada
Parmetro formal constante Parmetro Actual puede ser un literal, expresin, constante o variable inicializada
Variable no Inicializada
En ORACLE
Ejemplo: Parmetro IN
7369 v_id
SQL> CREATE OR REPLACE PROCEDURE raise_salary 2 (v_id in emp.empno%TYPE) 3 IS 4 BEGIN 5 UPDATE emp 6 SET sal = sal * 1.10 7 WHERE empno = v_id; 8 END raise_salary; 9 / Procedure created.
En ORACLE
7654
SQL> 1 2 3 4 5 6 7 8 9 10 11 12
CREATE OR REPLACE PROCEDURE query_emp (v_id IN emp.empno%TYPE, v_name OUT emp.ename%TYPE, v_salary OUT emp.sal%TYPE, v_comm OUT emp.comm%TYPE) IS BEGIN SELECT ename, sal, comm INTO v_name, v_salary, v_comm FROM emp WHERE empno = v_id; END query_emp; /
En ORACLE
FORMAT_PHONE procedure
'(800)633-0575'
v_phone_no
SQL> CREATE OR REPLACE PROCEDURE format_phone 2 (v_phone_no IN OUT VARCHAR2) 3 IS 4 BEGIN 5 v_phone_no := '(' || SUBSTR(v_phone_no,1,3) || 6 ')' || SUBSTR(v_phone_no,4,3) || 7 '-' || SUBSTR(v_phone_no,7); 8 END format_phone; 9 /
En ORACLE
--invoke procedure
En ORACLE
--invoke procedure
Borrando un PROCEDURE
DROP PROCEDURE procedure_name
Resumen
Un procedimiento es un bloque nombrado que realiza una accin.
Usa parmetros para pasar datos desde el entorno de llamada al procedimiento. Los Procedimientos pueden ser llamados desde cualquier herramienta, aplicacin lenguaje que soporte el SGBD. Los Procedimientos pueden servir como bloques de una aplicacin.
Qu es un Cursor?
Es una estructura de datos que nos permite recorrer el resultado de una consulta SQL y realizar operaciones en cada paso de sta.
La sintaxis para definir un cursor es la siguiente: DECLARE nombre-cursor FOR especificacion-consulta [ORDER BY]
Cursores
Por ejemplo:
DECLARE Mi_Cursor FOR SELECT num_emp, nombre, puesto, salario FROM empleados WHERE num_dept = 'informatica'
Nota: Este comando es slo declarativo. Especifica las filas y columnas que se van a recuperar. La consulta se ejecuta cuando se abre o se activa el cursor.
Ejemplo: Cursor
CREATE PROCEDURE EJEMPLO AS BEGIN /* La tabla Cliente 8 campos */ declare @cod as int declare @user as varchar(50) declare @pass as varchar(50)
-- declaramos el cursor e indicamos los campos a traer
declare CURSORITO cursor for select CliCod, CliUser, CliPass from Cliente open CURSORITO
-- Vamos al primer registro y cargamos en las variables los valores encontrados
fetch next from CURSORITO into @cod, @user, @pass while @@fetch_status = 0 begin update Cliente set CliPass= @user where CliCod=@cod
-- Avanzamos otro registro
Qu es una Funcin?
Es una porcin encapsulada de cdigo que puede ser reutilizada por diferentes programas.
Los SGBD traen funciones ya construidas que pueden ser utilizadas dentro de las aplicaciones para proveer funcionalidad comn. Ejemplo: GETDATE() retorna la fecha y hora actual del sistema.
Tipos de funciones
Scalar Functions: Retorna un resultado
con un valor escalar.
Scalar Functions
Pueden aceptar 0 o parmetros de entrada. ms
Retorna solo un valor escalar. Generalmente se usan en como campos de columnas y en las condiciones del Where. No se puede utilizar una funcin para cambiar el estado de un objeto de la base de datos (No puede insertar, modificar, eliminar datos de una tabla. No puede borrar tablas u otros objetos de la base de datos).
Tabled-Value Functions
Cumplen las mismas reglas de las Scalar Functions. Retorna una tabla como salida. Generalmente se usan en la clausula FROM.
Tipo de parametro
Cuerpo Opcional
siempre para el o los mismos parametros de entrada, el mismo valor de resultado. Ejemplo: Cos(). Funciones No Deterministicas: retorna diferentes valores de resultado cada vez que se les llaman Ejemplo: GetDate().
Qu es un Trigger Disparador?
Un evento que se ejecuta automticamente cuando se cumple una condicin establecida, al realizar una operacin de: insercin (INSERT), actualizacin (UPDATE) o borrado (DELETE).
Es una implementacion de Transact-SQL en un proceso batch SQL CLR que responde a un evento dentro de la base de datos.
SQL CLR: SQL Common Language Runtime
Tipos de Triggers
Existen 2 tipos:
Data Manipulation Languaje (DML): se ejecutan con las intrucciones INSERT, UPDATE or DELETE. Data Definition Languaje (DFL): se ejecutan cuando se crean, alteran o borran objetos de la base de datos.
DML Triggers
Puede estar atachado a una tabla o una vista en un evento particular definido. Modos de ejecucion:
AFTER: Se ejecuta cuando se
DDL Triggers
El propsito principal es auditar acciones realizadas en una base de datos.
Ejemplo: Trigger
Se tiene una tabla NOTAS de los alumnos y se desea auditar cada vez que alguien modifique altere la nota (UPDATE). Create table Notas ( codAlu int PRIMARY KEY, nota int ) Create table Auditoria ( codAlu int, nota_ant int, nota_nue int, obs varchar(20), fecha datetime )
CREATE trigger CAMBIASTATUS ON Notas For Update As Insert Into AUDITORIA Select d.codAlu, d.nota, i.nota, 'Modificacin', getdate() From Deleted d INNER JOIN Inserted i ON d.codAlu = i.codAlu
Inserted y Deleted son tablas lgicas que contienen los valores antiguos y los valores nuevos respectivamente.
43