Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Otra de updates (https://www.clubdelphi.com/foros/showthread.php?t=3082)

rafadrover 20-08-2003 21:08:03

Otra de updates
 
Hola amigos, de nuevo tengo problemas con el SQL, ahora estoy intentando que cuando me insertan un registro nuevo en una tabla, un campo de esta se actualize con el valor de un campo que esta en otra tabla distinta, he intentado hacerlo con un trigger, pero el interbase me dice que no puedo hacer un subselect dentro del trigger, teneis alguna idea de como deberia hacerse?

Gracias.

delphi.com.ar 20-08-2003 21:27:53

Sinceramente desconozco la potencialidad de los triggers de interbase, pero me parece raro que no puedas hacer algo tan sencillo, es mas la única solución a tu problema desde el lado del servidor, es la utilización de triggers!.. A no ser que plantees diferente el problema, o el valor sea constante y puedas usar Default Values.
Me parece que este hilo tendrías que haberlo posteado en el foro Interbase & Firebird.

Saludos!

rafadrover 20-08-2003 21:36:10

Me parecia mas un problema de SQL que de interbase, ya que teoricamente el SQL es estandard, yo queria que alguien me diera una idea de como tendria que ser ese trigger y probarlo, si despued no funciona en interbase, ya me busco la vida, yo he probado lo siguiente:

create trigger actualiza on tabla1
as
begin
campo_destino = select campo_origen from tabla2 where tabla2.codigo_tabla2=tabla1.ref_tabla2;
end;

Tocaria funcionar no?

delphi.com.ar 20-08-2003 22:02:45

Te reitero que desconozco Interbase, pero de todos modos esta línea no me parece correcta:
Cita:

Posteado originalmente por rafadrover
tabla2.codigo_tabla2=tabla1.ref_tabla2;

En algunos motores, por ejemplo Oracle, puedes modificar los valores que van a ser ingresados en la tabla, entonces solo tendrías que hacer:
Código:

...
Valor Varchar2(..)
BEGIN
  SELECT CAMPO
    INTO Valor
  FROM TABLA2
  WHERE ID=:NEW.RELACIO_A_TABLAD2;
  :NEW.VALOR_TABLA2 := Valor;
END;

En otros motores, por ejemplo SqlServer, tendrías que hacer un update de la tabla dentro del trigger, pues siempre los triggers se disparan despues de haber insertado el registro (Al menos hasta SqlServer 7)

La sintaxis de los triggers, sueles ser bastante particular para cada motor, y no es soportada por SQL ANSI 92, por eso la sugerencia del foro.

Saludos!

rafadrover 20-08-2003 22:14:54

Bueno, todo son ejemplos de codigo je,je
me puedo equivocar.....

Gracias, ha funcionado perfectamente, con interbase, aqui pongo el codigo por si alguien busca lo mismo

Código:

set term!!;
create trigger actu for lineamaterial
before insert as
declare variable preu numeric(15,2);
begin
  select preubase from material where lineamaterial.idmaterial=material.idmaterial into :preu;
  new.preucost=preu;
end!!

Perdonad por lo del simbolito.


La franja horaria es GMT +2. Ahora son las 13:43:13.

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