9
UNIVERSIDAD NACIONAL DE CHIMBORAZO FACULTAD DE CIENCIAS DE LA EDUCACIÓN HUMANAS Y TECNOLOGIAS ESCUELA DE: INFORMÁTICA APLICADA A LA EDUCACION SEXTO: SEMESTRE “A” TEMA: SENTENCIAS DE CONTROL - SUBLENGUAJES ESPECIALIZADOS DOCENTE ING: LEONARDO AYAVACA ALUMNO HECTOR LUMISACA SEPTIEMBRE_MARZO 2014-2015 RIOBAMBA- ECUADOR

Lumisaca hector bdii_t7

Embed Size (px)

Citation preview

Page 1: Lumisaca hector bdii_t7

UNIVERSIDAD NACIONAL DE CHIMBORAZO

FACULTAD DE CIENCIAS DE LA EDUCACIÓN HUMANAS Y TECNOLOGIAS

ESCUELA DE: INFORMÁTICA APLICADA A LA EDUCACION

SEXTO: SEMESTRE “A”

TEMA: SENTENCIAS DE CONTROL - SUBLENGUAJES ESPECIALIZADOS

DOCENTE ING: LEONARDO AYAVACA

ALUMNO HECTOR LUMISACA

SEPTIEMBRE_MARZO 2014-2015

RIOBAMBA- ECUADOR

Page 2: Lumisaca hector bdii_t7

Estructuras de control en Transact SQL

Estructura condicional IF

La estructura condicional IF permite evaluar una expresión booleana (resultado SI - NO), y

ejecutar las operaciones contenidas en el bloque formado por BEGIN END.

IF (<expresión>)

BEGIN

...

END ELSE IF (<expresión>)

BEGIN

...

END

ELSE

BEGIN

...

END

Ejemplo de la estructura condicional IF.

DECLARE @Web varchar (100),

@diminutivo varchar (3)

SET @diminutivo = 'DJK'

IF @diminutivo = 'DJK'

BEGIN

PRINT 'www.devjoker.com'

END

ELSE

BEGIN

PRINT 'Otra Web (peor!)'

END

La estructura IF admite el uso de sub consultas:

DECLARE @coPais int,

@descripción varchar(255)

set @coPais = 5

set @descripción = 'España'

IF EXISTS(SELECT * FROM PAISES

WHERE CO_PAIS = @coPais)

BEGIN

UPDATE PAISES

SET DESCRIPCION = @descripción

Page 3: Lumisaca hector bdii_t7

WHERE CO_PAIS = @coPais

END

ELSE

BEGIN

INSERT INTO PAISES

(CO_PAIS, DESCRIPCION) VALUES

(@coPais, @descripción)

END

Estructura condicional CASE

La estructura condicional CASE permite evaluar una expresión y devolver un valor u otro.

La sintaxis general de case es:

CASE <expresión>

WHEN <valor expresión> THEN <valor devuelto>

WHEN <valor expresión> THEN <valor devuelto>

ELSE <valor devuelto> -- Valor por defecto

END

Ejemplo de CASE.

DECLARE @Web varchar(100),

@diminutivo varchar(3)

SET @diminutivo = 'DJK'

SET @Web = (CASE @diminutivo

WHEN 'DJK' THEN 'www.devjoker.com'

WHEN 'ALM' THEN 'www.aleamedia.com'

ELSE 'www.devjoker.com'

END)

PRINT @Web

Otra sintaxis de CASE nos permite evaluar diferentes expresiones:

CASE

WHEN <expresión> = <valor expresión> THEN <valor devuelto>

WHEN <expresión> = <valor expresión> THEN <valor devuelto>

ELSE <valor devuelto> -- Valor por defecto

END

El mismo ejemplo aplicando esta sintaxis:

DECLARE @Web varchar(100),

@diminutivo varchar(3)

Page 4: Lumisaca hector bdii_t7

SET @diminutivo = 'DJK'

SET @Web = (CASE

WHEN @diminutivo = 'DJK' THEN 'www.devjoker.com'

WHEN @diminutivo = 'ALM' THEN 'www.aleamedia.com'

ELSE 'www.devjoker.com'

END)

PRINT @Web

Otro aspecto muy interesante de CASE es que permite el uso de subconsultas.

DECLARE @Web varchar(100),

@diminutivo varchar(3)

SET @diminutivo = 'DJK'

SET @Web = (CASE

WHEN @diminutivo = 'DJK' THEN (SELECT web

FROM WEBS

WHERE id=1)

WHEN @diminutivo = 'ALM' THEN (SELECT web

FROM WEBS

WHERE id=2)

ELSE 'www.devjoker.com'

END)

PRINT @Web

Bucle WHILE

El bucle WHILE se repite mientras expresión se evalue como verdadero.

Es el único tipo de bucle del que dispone Transact SQL.

WHILE <expresión>

BEGIN

...

END

Un ejemplo del bucle WHILE.

DECLARE @contador int

SET @contador = 0

WHILE (@contador < 100)

BEGIN

SET @contador = @contador + 1

PRINT 'Iteración del bucle ' + cast(@contador AS varchar)

END

Page 5: Lumisaca hector bdii_t7

Podemos pasar a la siguiente iteración del bucle utilizando CONTINUE.

DECLARE @contador int

SET @contador = 0

WHILE (@contador < 100)

BEGIN

SET @contador = @contador + 1

IF (@contador % 2 = 0)

CONTINUE

PRINT 'Iteración del bucle ' + cast(@contador AS varchar)

END

El bucle se dejará de repetir con la instrucción BREAK.

DECLARE @contador int

SET @contador = 0

WHILE (1 = 1)

BEGIN

SET @contador = @contador + 1

IF (@contador % 50 = 0)

BREAK

PRINT 'Iteración del bucle ' + cast(@contador AS varchar)

END

También podemos utilizar el bucle WHILE conjuntamente con sus consultas.

DECLARE @coRecibo int

WHILE EXISTS (SELECT *

FROM RECIBOS

WHERE PENDIENTE = 'S')-- Ojo, la subconsulta se ejecuta

-- una vez por cada iteración

-- del bucle!

BEGIN

SET @coRecibo = (SELECT TOP 1 CO_RECIBO

FROM RECIBOS WHERE PENDIENTE = 'S')

UPDATE RECIBOS

SET PENDIENTE = 'N'

WHERE CO_RECIBO = @coRecibo

END

Estructura GOTO

La sentencia goto nos permite desviar el flujo de ejecución hacia una etiqueta. Fue muy

utilizada en versiones anteriores de SQL Server conjuntamente con la variable de sistema

@@ERROR para el control de errores.

Actualmente, se desaconseja el uso GOTO, recomendándose el uso de TRY - CATCH para la

gestión de errores.

Page 6: Lumisaca hector bdii_t7

DECLARE @divisor int,

@dividendo int,

@resultado int

SET @dividendo = 100

SET @divisor = 0

SET @resultado = @dividendo/@divisor

IF @@ERROR > 0

GOTO error

PRINT 'No hay error'

RETURN

error:

PRINT 'Se ha producido una división por cero'

(herrate, 2006)

TRANSACCIÓN (BASE DE DATOS)

La transacción es una conjunto de instrucciones la cual tiene que realizar todas sus instrucciones

o ninguna de ellas, teniendo esta definición también se puede decir que la transacción es una

unidad lógica de trabajo.

Cada transacción debe tener las propiedades ACID.

Ahora ¿Cuáles son estas propiedades ACID?

Propiedades ACID

Propiedad Descripción

Atomicidad La transacción es realizada completamente o no realiza ninguna acción.

No puede realizar solamente mitad o parte de la transacción.

Consistencia Solo son ejecutadas aquellas transacciones que no tiene conflicto con las

reglas y directrices de integridad de la base de datos.

Aislamiento Si hay dos o más transacciones que en un mismo tiempo desean realizar

cambio a una misma información, el sistema garantiza que cada

Page 7: Lumisaca hector bdii_t7

Propiedades ACID

Propiedad Descripción

transacción ignora al resto de las transacciones es decir que cada una se

maneja de forma independiente para no generar errores.

Durabilidad

Cuando una transacción es exitosa los cambios hechos por la transacción

permanecen en el sistema y no se pueden deshacer aunque falle el

sistema.

Regularmente las transacciones comienzan con un BEGIN WORK y finalizan con un

COMMIT/COMMIT WORK o ROLLBACK/ROLLBACK WORK.

Ejemplo:?

3

4

5

6

7

BEGIN WORK

UPDATE Tabla SET dato = '15' WHERE dato2 = 'Manolo

DELETE FROM dato = 'Manolo'

COMMIT WORK

Hay otra manera de escribir una transacción estas son las transacciones ANSI, estas comienzan

cuando inicia cualquier sentencia SQL y finaliza con un COMMIT o ROLLBACK.

Ejemplo:

1

2

3

4

5

6

UPDATE Tabla SET dato = '15' WHERE dato2 = 'Manolo'

DELETE FROM dato = 'Manolo'

COMMIT

(Cuesi, 2012)

3.2. LAS AUTORIZACIONES Y DESAUTORIZACIONES

Todos los privilegios sobre la base de datos los tiene su propietario, pero no es el único que accede

a ésta. Por este motivo, el SQL nos ofrece sentencias para autorizar y desautorizar a otros usuarios.

1) Autorizaciones

Para autorizar, el SQL dispone de la siguiente sentencia:

Donde tenemos que: a) privilegios puede ser:

•ALL PRIVILEGES: todos los privilegios sobre el objeto especificado.

•USAGE: utilización del objeto especificado; en este caso el dominio.

•SELECT: consultas.

•INSERT [(columnas)]: inserciones. Se puede concretar de qué columnas.

•UPDATE [(columnas)]: modificaciones. Se puede concretar de qué columnas.

•DELETE: borrados.

•REFERENCES [(columna)]: referencia del objeto en restricciones de integri-dad. Se puede

concretar de qué columnas) Objeto debe ser:

•DOMAIN: dominio

SET TRANSACTION READ WRITE;

UPDATE empleados SET sueldo = sueldo – 1000 WHERE num_proyec = 3;

UPDATE empleados SET sueldo = sueldo + 1000 WHERE num_proyec = 1;

Page 8: Lumisaca hector bdii_t7

COMMIT; GRANT privilegios ON objeto TO usuarios

[WITH GRANT OPTION];

•TABLE: tabla.

•Vista.

c) Usuarios puede ser todo el mundo: PUBLIC, o bien una lista de los identi-ficadores de los

usuarios que queremos autorizar.

d) La opción WITH GRANT OPTION permite que el usuario que autoricemos pueda, a su vez,

autorizar a otros usuarios a acceder al objeto con los mismos privilegios con los que ha sido

autorizado.

2) Desautorizaciones

Para desautorizar, el SQL dispone de la siguiente sentencia:

Donde tenemos que: a) privilegios, objeto y usuarios son los mismos que para la sentencia

GRANT.

b) La opción

GRANT OPTION FOR se utilizaría en el caso de que quisiéramos eliminar el derecho a autorizar

(WITH GRANT OPTION).

c) Si un usuario al que hemos autorizado ha autorizado a su vez a otros, que al mismo tiempo

pueden haber hecho más autorizaciones, la opción

CASCADE hace que queden desautorizados todos a la vez.

d) La opción

RESTRICT no nos permite desautorizar a un usuario si éste ha autorizado a otros.

REVOKE [GRANTOPTIONFOR] privilegios ON objeto FROM usuarios

[RESTRICTCASCADE];

4. SUBLENGUAJES ESPECIALIZADOS

Muchas veces querremos acceder a la base de datos desde una aplicación he-cha en un lenguaje

de programación cualquiera. Para utilizar el SQL desde un lenguaje de programación, podemos

utilizar el SQL hospedado, y para traba-jar con éste necesitamos un pre compilador que separe

las sentencias del len-guaje de programación de las del lenguaje de bases de datos. Una alternativa

muy interesante a esta forma de trabajar son las rutinas SQL/CLI.

El objetivo de este apartado no es explicar con detalle ni el SQL hospedado ni, aún menos, las

rutinas SQL/CLI. Sólo introduciremos las ideas básicas del funcionamiento de ambos.

4.1. SQL hospedado

Para crear y manipular una base de datos relacional necesitamos SQL. Además, si la tarea que

queremos hacer requiere el poder de procesamiento de un len-guaje de programación como Java,

C, Cobol, Fortran, Pascal, etc., podemos utilizar el SQL hospedado en el lenguaje de

programación elegido. De este mo-do, podemos utilizar las sentencias del SQL dentro de nuestras

aplicaciones, poniendo siempre delante la palabra reservada

EXEC SQL*.

Para poder compilar la mezcla de llamadas de SQL y sentencias de programa-ción, antes tenemos

que utilizar un precompilador. Un precompilador es una herramienta que separa las sentencias

del SQL y las sentencias de programa-ción. Allá donde en el programa fuente haya una sentencia

de acceso a la base de datos, se debe insertar una llamada a la interfaz del SGBD. El programa

fuente resultante de la precompilación ya está únicamente en el lenguaje de programa-ción,

preparado para ser compilado, montado y ejecutado.

En la figura que encontraréis en la página siguiente podéis observar este funcionamiento.

Todas las sentencias de definición, manipulación y control que hemos visto para el SQL se pueden

utilizar en el SQL hospedado, pero precedidas de la cláu-sula

EXEC SQL. Sólo habrá una excepción: cuando el resultado de una sentencia SQL obtenga más

de una fila o haga referencia también a más de una, deberemos trabajar con el concepto de cursor.

Un cursor se tiene que haber declarado antes de su utilización (EXEC SQL DECLARE

nombre_cursor CURSORFOR). Para utilizarlo, se debe abrir (EXEC SQL OPEN

nombre_cursor), ir tomando los datos uno a uno, tratarlos * Puede haber pequeñas diferencias

dependiendo del lenguaje de programación concreto que estemos considerando.

Page 9: Lumisaca hector bdii_t7

(EXEC SQL FETCH nombre_cursor INTO), y finalmente, cerrarlo (EXEC SQL CLOSE

nombre_cursor).

4.2. Las SQL/CLI

Las SQL/CLI (

SQL/Call-Level Interface), denominadas de forma abreviada CLI, permiten que aplicaciones

desarrolladas en un cierto lenguaje de programa-ción (con sólo las herramientas disponibles para

este lenguaje y sin el uso de un precompilador) puedan incluir sentencias SQL mediante llamadas

a libre-rías. Estas sentencias SQL se deben interpretar en tiempo de ejecución del programa, a

diferencia del SQL hospedad o, que requería el uso de un pre-compilador.

La interfaz ODBC(Open Database Connectivity) define una librería de funciones que permite a

las aplicaciones acceder al SGBD utilizando el SQL. Las rutinas

SQL/CLI están fuertemente basadas en las características de la interfaz ODBC, y gracias al trabajo

desarrollado por SAG-X/Open (SQL Access Group-X/Open), fueron añadidas al estándar

ANSI/ISO SQL92 en 1995.

Las SQL/CLI son simplemente rutinas que llaman al SGBD para interpretar las sentencias SQL

que pide la aplicación. Desde el punto de vista del SGBD, las SQL/CLI se pueden considerar,

simplemente, como otras aplicaciones.

(Escofet, 2006)

Bibliografía

Cuesi, J. J. (20 de 01 de 2012). google. Obtenido de bloger: http://aprendiendo-

software.blogspot.com/2012/01/transaccion-base-de-datos.html

Escofet, C. M. (5 de 11 de 2006). google. Obtenido de pdf: http://ocw.uoc.edu/computer-

science-technology-and-multimedia/bases-de-datos/bases-de-

datos/P06_M2109_02149.pdf

herrate, p. (6 de 12 de 2006). google. Recuperado el 19 de 01 de 2015, de blogger:

http://www.devjoker.com/contenidos/articulos/234/Estructuras-de-control-en-

Transact-SQL.aspx