PDA

Ver la Versión Completa : Otra de updates


rafadrover
20-08-2003, 21:08:03
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 (http://www.clubdelphi.com/foros/forumdisplay.php?s=&forumid=19).

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:
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:

...
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


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.