Oracle - Duda consulta en ORACLE

 
Vista:

Duda consulta en ORACLE

Publicado por blos (1 intervención) el 31/01/2007 13:26:00
Hola, estoy realizando un proyecto para una asignatura de base de datos y necesito añadir una restricción pero llevo dos días probando y Oracle no me deja ejecutar este código ni ninguno parecido.

Antecedentes: Tengo que alojar a una serie de tripulantes en diferentes cámaras. La restricción es que si la capacidad de la habitación está al completo no puedo seguir metiendo gente en la habitación.

Tablas:
--> Tabla tripulación, que tiene como clave foránea al código de la cámara y la capacidad de la misma (es una clave compuesta).
--> Tabla Cámara, cuya clave principal la forman su capacidad y su código.

Código:
estoy intentando lo siguiente:

check (not exists
(select capacidad from camara) <
(select count(codigo_pasajero)
from tripulacion
group by codigo_cam
where codigo_cam=codigo_dep)));

El error que me da es:
ORA-02251: subconsulta no permitida aquí

Gracias anticipadas!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Duda consulta en ORACLE

Publicado por Rodolfo Reyes (445 intervenciones) el 31/01/2007 15:27:03
Un Check Constraint es para validaciones sencillas. Para meter codigo mas complejo utiliza un Trigger, en tu caso tendrias que hacer un Trigger que cubra, el update y el Insert.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Duda consulta en ORACLE

Publicado por Lytxu (3 intervenciones) el 09/02/2007 13:28:50
Hola,
en estos casos lo mejor sería hacer un trigger. Podrías hacer algo parecido a esto:

CREATE OR REPLACE TRIGGER TRIP_CAM BEFORE INSERT ON
TRIPULACION IS
VCAPAC NUMBER;
CAPAC_MAX NUMBER;
A EXCEPTION
BEGIN
select count(codigo_pasajero),capacidad into VCAPAC,CAPAC_MAX
from tripulacion WHERE CODIGO_CAM=:new.codigo_cam
group by capacidad;

if vcapac = capac_max then
:new.codigo_cam:='ERROR';
Raise ExcA;
end if;

EXCEPTION
WHEN ExcA then
dbms_output.println('Se ha producido un error al insertar el código de cámara');
END;

Espero que te sirva de ayuda.

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar