Académique Documents
Professionnel Documents
Culture Documents
1. El Sublenguaje de Manipulación.
(Se verá en la clase de problemas)
2. El Sublenguaje de Definición.
9 date. Fecha.
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’))
);
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)
);
¾ Triggers
• Se utilizan para
mantener la integridad referencial,
asegurar reglas de negocio complejas y
auditar cambios en los datos.
on {NombreTabla | Nombre-Vista}
¾ Ejemplo de Trigger.
Una vista
• es una tabla virtual,
• no hay ninguna tupla que pertenezca a ella,
• el SGBD sólo conoce su definición.
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.
La sintáxis es:
GRANT Privilegio [, Privilegio ...]
ON Objeto
TO { Usuario | Papel | PUBLIC } [, {Usuario | Papel | PUBLIC}
...]}
[WITH GRANT OPTION]
4. El Sublenguaje Huésped.
EJEMPLO1:
DECLARE salario_med NUMBER;
BEGIN
SELECT avg(salario) INTO salario_med
FROM empleado;
UPDATE empleado
SET salario = salario * 1,1
WHERE salario < salario_med;
SELECT avg(salario) INTO salario_med
FROM empleado;
IF salario_med > 50000 THEN
dbms_output.put_line (‘El salario medio
es ‘ || salario_med);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line (‘Error en la
actualización’);
ROLLBACK;
END;
EJEMPLO2:
salario_emp NUMBER;
salario_superv_emp NUMBER;
nss_emp VARCHAR2(9);
nss_superv_emp VARCHAR2(9);
CURSOR cursor_salario IS
SELECT nss, salario, nss_superv FROM
empleado;
BEGIN
OPEN cursor_salario;
LOOP
FETCH cursor_salario INTO nss_emp,
salario_emp, nss_superv_emp;
EXIT WHEN cursor_salario%NOTFOUND;
IF nss_superv_emp is NOT NULL THEN
SELECT salario INTO salario_superv_emp
FROM empleado
WHERE nss = nss_superv_emp;
IF salario_emp > salario_superv_emp THEN
dbms_output.put_line (nss_emp);
END IF;
END IF;
END LOOP;
IF cursor_salario%ISOPEN THEN
CLOSE cursor_salario;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_outut.put_line (‘Errores con el NSS
‘ || nss_emp);
IF cursor_salario%ISOPEN THEN
CLOSE cursor_salario;
END;
EXEC SQL
SELECT nombre, apellido
INTO :vnombrep, :vapellido
FROM empleado
WHERE nss = :num-seg-soc;
…
sql_error ()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf (“Error detectado \n”);
}
Ejemplo:
EXEC SQL DECLARE emp CURSOR FOR
SELECT nss, nombrep, apellido
FROM Empleado
WHERE nd = :numerod;