Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

insertar con triggers

Estas en el tema de insertar con triggers en el foro de Oracle en Foros del Web. Buenas! Tengo un trigger como el siguiente, en el que saco los datos que necesito mediante unas select y me lo guardo en una variable. ...
  #1 (permalink)  
Antiguo 10/03/2011, 06:56
 
Fecha de Ingreso: marzo-2011
Mensajes: 3
Antigüedad: 13 años, 1 mes
Puntos: 0
insertar con triggers

Buenas!

Tengo un trigger como el siguiente, en el que saco los datos que necesito mediante unas select y me lo guardo en una variable.
Ahora bien, como hago para insertar esas variables en la tabla? No puedo utilizar los valores new y old para esas variables ya que son valores de otras tablas, y poniendo simplemente las variables no funciona :


create or replace trigger ingreso_paciente
after insert on paciente for each row
declare

codigoingreso number;
codigohabitacion number;
numeromedico number;

begin

--sacar cod_ingreso

select max(cod_ing) into codigoingreso from ingreso;
codigoingreso := codigoingreso + 1;

--sacar cod_habitacion
select min(cod_hab) into codigohabitacion from habitacion where disponible='S' and planta=(select min(cod_planta) from planta) ;

--sacar num_col
select num_col into numeromedico from medico m,ingreso i,habitacion h where m.espec='general' and m.planta=h.planta and i.cod_hab=h.cod_hab and rownum=1;



--insert into ingreso values(codigoingreso,:new.cod_pac,codigohabitacion ,numeromedico);
--insert into trata values(codigoingreso,numeromedico);

end;


gracias de antemano.
  #2 (permalink)  
Antiguo 19/03/2011, 19:17
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: insertar con triggers

Segun he entendido, lo que quieres es que cuando hagas un insert en la tabla paciente, inserte tambien nuevos registros en ingreso y trata, y que introduzca el cod_ing en el paciente que acabas de insertar no?

De ser así, estas haciendo cosas mal.

Para empezar, si quieres llevar una cuenta de los pacientes que tienes, lo mejor que puedes hacer es crearte una secuencia y cada vez que se inserte un nuevo paciente hacer un nextVal() e ingresarlo como cod_ing en pacientes, eso lo puedes hacer desde la sentencia insert llamando al nextVal() de la secuencia y dandoselo como valor de cod_ing.

Ejemplo:

Creas la secuencia:
Código:
create sequence incremento_pacientes increment by 1 start with 0;
Insertas un nuevo paciente incrementando esa secuencia y usando su valor incrementado como cod_ing:
Código:
insert into paciente values(incremento_pacientes.nextVal(), 'pepe', ....);
Me imagino que cod_ing sera pk de paciente(y lo que quieres hacer es un autoincrement puro y duro) y el problema que tenias era ese, que no sabias como insertar un paciente cuyo cod_ing fuese el cod_ing del ultimo paciente +1. Pues es asi, creandote una secuencia.

Eso si, la secuencia la has de crear cuando crees la tabla en la que quieras el autoincrement, porque si ya tienes 20 pacientes y tu ultimo cod_ing es 20, si creas la secuencia empezando a cero, cuando vayas a usar el insert que te he puesto antes te va a dar un fallo, ya que le insertaras cod_ing 1 y ese ya existe. Puedes empezar la secuencia con el ultimo cod_ing que tengas ya, cambiando el START WITH de arriba por el ultimo cod_ing que tengas.

Un saludo!

Etiquetas: trigger
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:30.