Jueves 14 de Noviembre de 2024, 16:53
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Bases de Datos
»
Oracle
(Moderador:
ElNapster
) »
Echadme una mano con triggers, estoy aprendiendo
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Echadme una mano con triggers, estoy aprendiendo (Leído 2936 veces)
manurodri189
Miembro MUY activo
Mensajes: 117
Echadme una mano con triggers, estoy aprendiendo
«
en:
Martes 9 de Marzo de 2010, 18:37 »
0
Pues a ver si alguno de vosotros me echa una mano con esto.
Tengo 2 tablas, y se trata de hacer un trigger que si se actualiza una, tenga que hacer un registro en otra, con la hora de modificación, el valor anterior y el nuevo, y poco más.
Pero he hecho el trigger, y me dice errores de compilación, osea que está mal. Me vuelvo loco con esto, y tiene pinta de ser chorrada, pero no doy con la tecla.
Hasta ahora he hecho esto, pero vamos que parece que no funciona el trigger.
Código: SQL
CREATE
TABLE
Cuenta
(
nro_cuenta
VARCHAR
(
10
)
,
balance
INTEGER
,
PRIMARY
KEY
(
nro_cuenta
)
)
;
CREATE
TABLE
Transaccion
(
nro_cuenta
VARCHAR
(
10
)
,
hora_mod
DATE
,
id_cliente
VARCHAR
(
10
)
,
ant_balance
INTEGER
,
act_balance
INTEGER
,
PRIMARY
KEY
(
nro_cuenta
,
hora_mod
)
)
;
CREATE
OR
REPLACE
TRIGGER
actualizar
AFTER
UPDATE
ON
Cuenta
BEGIN
INSERT
INTO
Transaccion
(
hora_mod
,
ant_balance
,
act_balance
)
VALUES
(
SYSDATE
,
OLD
.
balance
,
NEW
.
balance
)
END
actualizar;
Salu2
Tweet
Thanatos-chan
Miembro MUY activo
Mensajes: 136
Nacionalidad:
Re: Echadme una mano con triggers, estoy aprendiendo
«
Respuesta #1 en:
Miércoles 10 de Marzo de 2010, 17:54 »
0
que tal
anexo
Código: SQL
CREATE
OR
REPLACE
TRIGGER
actualizar
AFTER
UPDATE
ON
Cuenta
FOR
each
ROW
BEGIN
INSERT
INTO
Transaccion
(
hora_mod
,
ant_balance
,
act_balance
)
VALUES
(
SYSDATE
,
:
OLD
.
balance
,
:
NEW
.
balance
)
;
END
actualizar;
/
unas cuantas cosas
1-los valores new y old no se pueden usar a nivel de tabla, por lo que el trigger tiene que ser "for each row" a nivel de fila
2-los valores new and old so variables del motor de base de datos de oracle por lo que necesitas referenciarte a ella como variables con el ":"
3-si quieres poner el nombre al final del trigger tienes que incluir el "/" para marcar end of file.
suerte!
Que es un genio???? yo superare a un genio con trabajo duro, y eso es todo.
manurodri189
Miembro MUY activo
Mensajes: 117
Re: Echadme una mano con triggers, estoy aprendiendo
«
Respuesta #2 en:
Lunes 15 de Marzo de 2010, 09:58 »
0
Muchas gracias, ya entendí todo eso, o eso creo
Ahora intento lo siguiente:
Código: SQL
CREATE
TABLE
distancias
(
ruta
VARCHAR
(
10
)
,
distancia_k
INTEGER
,
distancia_m
INTEGER
,
PRIMARY
KEY
(
ruta
)
)
;
Tabla creada
.
CREATE
OR
REPLACE
TRIGGER
up_km
AFTER
UPDATE
ON
distancias
ON
distancia_k
FOR
each
ROW
BEGIN
UPDATE
transaccion
SET
distancia_m
=
:
NEW
.
distancia_k
*
0.621371
;
END
up_km;
/
Este trigger lo que hace es si se actualiza la distancia en km automaticamente lo pone en millas. Pero no se como acceder en esta linea al altributo de la tabla:
Código: SQL
AFTER
UPDATE
ON
distancias
ON
distancia_k
Se supone que si inserto una nueva fila con km o millas, tiene que actualizar el otro atributo, eso si que no se por donde cogerlo. Muchas gracias.
Salu2
manurodri189
Miembro MUY activo
Mensajes: 117
Re: Echadme una mano con triggers, estoy aprendiendo
«
Respuesta #3 en:
Lunes 15 de Marzo de 2010, 11:26 »
0
Bueno, he leido un tutorial que me he bajado muy chulo, y he hecho lo siguiente:
Código: SQL
CREATE
OR
REPLACE
TRIGGER
up_km
AFTER
UPDATE
OF
distancia_k
,
distancia_m
ON
distancias
FOR
each
ROW
BEGIN
IF
UPDATING
(
'distancia_k'
)
THEN
UPDATE
distancias
SET
distancia_m
=
:
NEW
.
distancia_k
*
0.621371
;
ELSIF UPDATING
(
'distancia_m'
)
THEN
UPDATE
distancias
SET
distancia_k
=
:
NEW
.
distancia_m
*
1.609344
;
END
IF
;
END
up_km;
/
Pero al hacer un set, da problemas de tablas mutantes, ahi si que no tengo ni idea de como solucionarlo.
Salu2
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Bases de Datos
»
Oracle
(Moderador:
ElNapster
) »
Echadme una mano con triggers, estoy aprendiendo