Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   trigger de insert recorrer un tabla completa (https://www.clubdelphi.com/foros/showthread.php?t=86751)

juank1971 27-09-2014 16:56:55

trigger de insert recorrer un tabla completa
 
Hola saludos:
Tengo una tabla en interbase que necesito insertar en un trigger de insert todas las filas de otra tabla en una tercera ,
O sea esta es la estructura tengo una tabla llamada PCS :

Una que tiene la computadoras llamadas pcs
Código SQL [-]
  create table PCS(
  idpc integer not null primary key,
  nombre  varchar(40),
  idarea integer not null,
  ip  varchar(20),
  foreign key (idarea) references Areas(idarea)
  on delete cascade
  on update no action
  );

Otra llamada Piezas: que tiene la pizas que hay en la pc
Código SQL [-]
CREATE TABLE  Piezas(
  idpieza  INTEGER PRIMARY KEY,
  idTipoPieza  integer,
  Marca  varchar(50),
  Modelo  varchar(50),
  Serie  varchar(50),
  Opservaciones  varchar(100),
  idpc  INTEGER,
  foreign key (idpc  ) references PCS(idpc  )
  );

Y otra que tiene los tipo de piezas disco duros, motherboard ram, etc.
Código SQL [-]
  CREATE TABLE TipoPieza (
  Id_TipoPieza  INTEGER PRIMARY KEY,
  Nombre  varchar(50)
  );

Como todas las computadoras tienen dentro disco duro ram y otras, quiero en el momento de insertar una pc en pcs en el trigger de insert que se inserten todos los registros de la tabla TipoPieza en la tabla Piezas, o sea el Id_TipoPieza .

Caminante 27-09-2014 18:08:06

Hola

¿Y que tienes avanzado hasta ahora? ¿Cual es la duda?

Saludos

juank1971 27-09-2014 18:56:15

Disculpa . no logro explicarme bien ,la duda es esa no se como hacer el trigger de insert de la tabla pcs
Como todas las computadoras tienen dentro disco duro ram y otras partes y piezas, quiero en el momento de insertar una pc en pcs en el trigger de insert que se inserten todos los registros de la tabla TipoPieza en la tabla Piezas, o sea el Id_TipoPieza con ese idpc que tengo en el momento de insert en pcs .

no se como recorer todas las filas de la tabla TipoPieza opteniendo todos esos Id_TipoPieza
para insertar en la tabla piezas una línea por cada uno.

O sea quiero en el trigger de insert de la tabla pcs, que cuando se inserte una pc, con ese idpc
Insertar 4 o 5 o la cantidad de tipos de piesas que existan en la tabla tipopiezas insertarlos en la tabla piezas con ese idpc que inserte nuevo.
Este es la idea

Código:

  Tabla pcs
  Idpc    nombre    idarea        ip
  1        secretaria      2    192.3168.25.3
 
  Tabla Piezas
  Id_pieza      id_tipopieza      marca        modelo ………………
  1                      2                        seagate   
 
  Tabla tipopieza
  Id_tipopieza    nombre
  1                                          mb
  2                                          Disco duro

Quiero insertar todos los Id_tipopieza de la tabla tipopieza en la tabla piezas con cada insert que haga en la tabla pcs . me explique o lo que hice fue enrredar mas la pregunta.


gracias por responderme

duilioisola 29-09-2014 16:57:34

Así es como debes hacerlo.
En un trigger AFTER INSERT.

Código SQL [-]
CREATE OR ALTER TRIGGER PCS_AI0 FOR PCS
ACTIVE AFTER INSERT POSITION 0
as
begin
  /* Inserto una lista de piezas */
  /* El campo IDPC lo relleno con el de esta tabla (new.idpc) */
  /* El campo IDTIPOPIEZA lo relleno con el select */
  insert into piezas (idpc, idTipoPieza)
  select new.idpc, Id_TipoPieza from TipoPieza;
end

Es como hacer
Código SQL [-]
INSERT INTO TABLA (CAMPO_1, CAMPO_2, ...)
SELECT CONSTANTE, CAMPO_A, CAMPO_B, ... FROM TABLA_B

También lo puedes hacer así:
Código SQL [-]
CREATE OR ALTER TRIGGER PCS_AI0 FOR PCS
ACTIVE AFTER INSERT POSITION 0
as
declare variable idTipoPieza integer;
begin
  /* Recorro la tabla de TipoPiezas */
  for select Id_TipoPieza from TipoPieza
      into :idTipoPieza
  do
      /* Inserto la pieza en la tabla de piezas de este PC */
      insert into piezas (idpc, idTipoPieza)
      values (new.idpc, :idTipoPieza);
end;

juank1971 29-09-2014 18:08:04

gracias
 
ok gracias amigo era eso lo que necesitaba, es que vendo de sqlserver y parece lo mismo pero no lo es, cualquier pequeño detalle te traba la cosa ,

gracias mucha salud y pesetas juank


La franja horaria es GMT +2. Ahora son las 00:52:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi