0% encontró este documento útil (0 votos)
3 vistas12 páginas

Estandar SQL: Manipulación y Definición

El documento aborda el estándar SQL, incluyendo los sublenguajes de manipulación, definición, control y huésped. Se detallan las sentencias para crear y modificar relaciones, así como las restricciones de integridad y la creación de vistas y triggers. También se explica cómo conceder y revocar privilegios en la base de datos y el uso de SQL embebido con cursores.

Cargado por

gonmdp
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas12 páginas

Estandar SQL: Manipulación y Definición

El documento aborda el estándar SQL, incluyendo los sublenguajes de manipulación, definición, control y huésped. Se detallan las sentencias para crear y modificar relaciones, así como las restricciones de integridad y la creación de vistas y triggers. También se explica cómo conceder y revocar privilegios en la base de datos y el uso de SQL embebido con cursores.

Cargado por

gonmdp
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Bases de Datos 3º Informática de Sistemas

TEMA 7.- EL ESTANDAR SQL.


El Sublenguaje de Manipulación.
El Sublenguaje de Definición.
El Sublenguaje de Control.
El Sublenguaje Huésped.

1. El Sublenguaje de Manipulación.
(Se verá en la clase de problemas)

2. El Sublenguaje de Definición.

Permite definir cada relación que pertenece a la base de datos


relacional, incluyendo:

• El esquema de cada relación.


• El dominio de valores permitido a cada atributo.
• Restricciones de Integridad.
• El conjunto de índices que se crean para cada relación.
• Información de seguridad y autorización de cada relación.
• La estructura de almacenamiento físico de cada relación en el
disco.

2.1. Definir una relación.

Para crear una relación mediante SQL, se utiliza la sentencia create


table:

CREATE TABLE [Esquema.]NombreTabla (


{NombreColumna TipoColumna [NOT NULL],}+,
{CONSTRAINT NombreRestricción
{UNIQUE ([NombreColumna,]+) |
CHECK (Condicion) |
PRIMARY KEY ([NombreColumna,]+) |
FOREIGN KEY (NombreColumna) REFERENCES
NombreTabla(NombreColumna)},}*)

El Estándar SQL Página 1 de 12


Bases de Datos 3º Informática de Sistemas

Principales tipos en SQL de ORACLE (TipoColumna).

varchar2 (n). Cadena de caracteres de longitud variable, con


un máximo de n caracteres.

number. Números sin restricción en la precisión.

number (l, d). Números, donde “l” es la longitud y “d” el


número de dígitos decimales.

date. Fecha.

Blob. Objeto binario de hasta 4 Gb.

2.2. Definir las Restricciones de Integridad en SQL de ORACLE


(CONSTRAINT NombreRestricción).

NOT NULL. Establece la obligatoriedad de que la columna tenga


un valor no nulo. Se debe especificar junto a la columna a la que
afecta.

UNIQUE. Evita valores repetidos en una o varias columnas,


permitiendo valores nulos.

CHECK. Comprueba que se cumpla una condición determinada al


rellenar esa o esas columnas. La condición sólo puede estar
construida con columnas de esta misma tabla.

El Estándar SQL Página 2 de 12


Bases de Datos 3º Informática de Sistemas

PRIMARY KEY. Establece el conjunto de columnas que forman la


clave primaria de esta tabla. La restricción garantiza la unicidad y
la obligatoriedad. Sólo puede existir una clave primaria por tabla.

FOREIGN KEY. Establece que los valores válidos de la o las


columnas son o bien valores presentes en la o las columnas
referenciadas o bien valores nulos. No hay límite para el número
de claves ajenas en una tabla.

Se puede forzar que cuando una fila de la tabla referenciada sea


borrada, todas las filas de esta tabla cuya clave ajena coincida con
la clave borrada se borren también. Esto se consigue añadiendo la
coletilla ON DELETE CASCADE en la definición de la clave
ajena.

Ejemplo de Sentencia Create Table:

REM
REM Tabla Departamento con un código de departamento, un nombre y
REM una localización.
REM
create table departamento (
codigo_dep varchar2 (3),
nombre varchar2 (15) not null,
localidad varchar2 (15),
constraint dep_pk primary key (codigo_dep),
constraint dep_local check
(localidad in (‘Valladolid’, ‘Soria’, ‘Palencia’))
);

El Estándar SQL Página 3 de 12


Bases de Datos 3º Informática de Sistemas

REM
REM Tabla Empleado
REM
create table empleado (
codigo_emp varchar2 (3),
nombre varchar2(10) not null,
oficio varchar2(11),
fecha_alta date,
salario number(10,2),
codigo_dep varchar2(3)
constraint emp_pk primary key (codigo_emp),
constraint emp_fk foreign key (codigo_dep)
references departamento (codigo_dep) on delete cascade,
constraint emp_ck check (salario > 0)
);

2.3. Modificar o Borrar una Relación.


Para borrar una relación con SQL, se utiliza la sentencia drop table:

DROP TABLE [Esquema.]NombreTabla;


La sentencia borra toda la información de la tabla: el esquema y
todas las tuplas.

Para modificar el esquema de una relación con SQL, se utiliza la


sentencia alter table:

ALTER TABLE [Esquema.]NombreTabla {ADD | MODIFY}


({NombreColumna TipoColumna [NOT NULL],}+);

Esta sentencia permite añadir o modificar atributos de una relación.

ALTER TABLE [Esquema.]NombreTabla {ADD | DROP}


CONSTRAINT NombreRestricción DefiniciónRestricción;

Esta sentencia permite añadir o modificar una restricción.

El Estándar SQL Página 4 de 12


Bases de Datos 3º Informática de Sistemas

2.4. Más Restricciones de Integridad con el SQL de ORACLE.

Triggers

• Un trigger (disparador) define una acción que la base de datos


siempre debería realizar cuando ocurre algún tipo de
acontecimiento que la afecta.

• Se utilizan para
mantener la integridad referencial,
asegurar reglas de negocio complejas y
auditar cambios en los datos.

• Para definir un trigger se debe:


Especificar las condiciones bajo las que el trigger será
ejecutado.
Especificar las acciones que se realizarán cuando el trigger
se ejecute.

• Para crear un trigger mediante SQL, se utiliza la sentencia


create trigger:

CREATE TRIGGER NombreTrigger

{before | after | instead of}


{delete | insert | update [of NombreColumna
[, NombreColumna] ...] }
[or {delete | insert | update [of NombreColumna
[, NombreColumna] ...] } ] ...

on {NombreTabla | Nombre-Vista}

[ [referencing { old [as] NombreViejo | new [as] NombreNuevo} ...]


for each {row | statement} [when (Condición)] ] Bloque pl/sql

El Estándar SQL Página 5 de 12


Bases de Datos 3º Informática de Sistemas

Ejemplo de Trigger.

• Supongamos que un banco decide trabajar con los descubiertos


de las cuentas como sigue:

Pone el saldo de la cuenta a cero.


Crea un préstamo por la cantidad del descubierto.
Da a este préstamo un número de préstamo idéntico al
número de cuenta que tiene el descubierto.

• La condición para ejecutar el trigger es una modificación en la


relación Cuenta que produzca un valor del atributo Saldo
negativo.

• La sentencia para la creación del trigger es:

create trigger Descubierto


instead of update on Cuenta
for each row when ([Link] < 0)
begin
insert into Prestamos values
(:old.Id_Sucursal, :old.Id_Cuenta, :−[Link]);
insert into Tomador
(select Nombre_Cliente, Id_Cuenta
from Cliente
where Cliente.Id_Cuenta = old.Id_Cuenta);
update Cuenta
set [Link] = 0
where new.Id_Cuenta = old.Id_Cuenta;
end;

El Estándar SQL Página 6 de 12


Bases de Datos 3º Informática de Sistemas

2.5. Crear una vista.

Una vista es la implementación de un esquema externo, según la


Arquitectura ANSI/SPARC, en el Modelo Relacional.

Una vista
• es una tabla virtual,
• no hay ninguna tupla que pertenezca a ella,
• el SGBD sólo conoce su definición.

Una vista se define utilizando al instrucción create view, se le da un


nombre a la vista y se indica la consulta que la va a calcular.

CREATE VIEW NombreVista [(Nombre de Atributos)] AS


<Sentencia de Consulta>;

Cuando se utiliza la vista (quizás como parte de alguna sentencia


SELECT) es cuando el SGBD realiza la consulta que define la vista y
presenta aquellas tuplas que forman parte de la vista.

Las actualizaciones en las vistas están muy restringidas por los


problemas que pueden originar en la consistencia de la información de la
base de datos.

El Estándar SQL Página 7 de 12


Bases de Datos 3º Informática de Sistemas

3. El Sublenguaje de Control.
Los usuarios que han creado objetos en la base de datos (tablas,
vistas, ...) pueden conceder privilegios sobre ellos a otros usuarios por
medio de la orden GRANT.

También pueden conceder la capacidad de hacer concesiones sobre


sus objetos con la opción with grant option.

La sintáxis es:
GRANT Privilegio [, Privilegio ...]
ON Objeto
TO { Usuario | Papel | PUBLIC } [, {Usuario | Papel | PUBLIC}
...]}
[WITH GRANT OPTION]

Los privilegios pueden ser:


SELECT
INSERT
DELETE
UPDATE [(Lista de Columnas)]
ALL

Para denegar los privilegios otorgados, se utiliza la orden REVOKE:

REVOKE Privilegio [, Privilegio ...]


ON Objeto
FROM { Usuario | Papel | PUBLIC } [, {Usuario | Papel |
PUBLIC} ...]}

El Estándar SQL Página 8 de 12


Bases de Datos 3º Informática de Sistemas

4. El Sublenguaje Huésped.

En SQL embebido (o huésped) la ejecución de una consulta la realiza el


SGBD y el resultado de la misma se hace disponible al programa, tupla a
tupla (registro a registro).

Un programa con SQL embebido debe tratarse con un preprocesador


especial antes de la compilación:

• Las consultas de SQL embebido se sustituyen por declaraciones


escritas en el lenguaje anfitrión y por llamadas a procedimientos
que permiten la ejecución del acceso a la base de datos.
• Tras esta operación, el programa resultado se compila con el
compilador del lenguaje anfitrión.

Para identificar las consultas de SQL embebido, se utiliza la instrucción


EXEC SQL:

EXEC SQL < Instrucción de SQL embebido > END-EXEC

• A las sentencias SQL se les incorpora la claúsula INTO para


indicar las variables de programa sobre las cuales se leerán los
valores de los atributos.

El Estándar SQL Página 9 de 12


Bases de Datos 3º Informática de Sistemas

• Se pueden utilizar variables compartidas por el lenguaje huesped y


el SGBD.
- Estas variables se declaran en el programa del lenguaje
anfitrión identificándolas como tales en un bloque,
EXEC SQL BEGIN DECLARE
....
SECTION END-EXEC.
- Dentro de las sentencias SQL se identifican con : (dos
puntos) delante del nombre de la variable.

• Ejemplo
Leemos un número de seguridad social y a continuación obtenemos la
tupla EMPLEADO que tiene ese número de seguridad social:

void consulta(){
EXEC SQL BEGIN DECLARE SECTION END-EXEC
char vnombrep[15], vapellido[15];
int num-seg-soc;
EXEC SQL END DECLARE SECTION END-EXEC

/* lectura de num-seg-soc del usuario */

EXEC SQL
SELECT nombre, apellido INTO :vnombrep, :vapellido
FROM empleado
WHERE nss = :num-seg-soc
END-EXEC

El Estándar SQL Página 10 de 12


Bases de Datos 3º Informática de Sistemas

4.1. Cursores.
El resultado de una consulta puede ser un conjunto de tuplas. Este
conjunto se puede manejar de igual modo que se manipula un fichero,
utilizando cursores que nos permiten desplazarnos por el conjunto.

• La declaración de un cursor se hace para una consulta especifíca, y


obedece a la siguiente sintaxis:
EXEC SQL DECLARE < cursor > CURSOR FOR < query >

Ejemplo:
EXEC SQL DECLARE emp CURSOR FOR
SELECT nss, nombrep, apellido
FROM Empleado
WHERE nd = :numerod
END-EXEC

• Apertura del Cursor.


EXEC SQL OPEN < cursor > END-EXEC

Ejemplo:
EXEC SQL OPEN emp END-EXEC

• Se accede a cada tupla con la sentencia FETCH:


EXEC SQL FETCH FROM <cursor> CURSOR INTO <lista variables>

El Estándar SQL Página 11 de 12


Bases de Datos 3º Informática de Sistemas

Ejemplo:
while (!strcmp(SQLSTATE, Fintuplas))
{
EXEC SQL
FETCH FROM emp INTO :vnombrep, :vapellido
END-EXEC
/* mostrar en pantalla los valores de vnombrep y vapellido */
}
EXEC SQL CLOSE emp END-EXEC

El Estándar SQL Página 12 de 12

También podría gustarte