Oracle - Referenciar mi registro actual

 
Vista:

Referenciar mi registro actual

Publicado por CarlosA (5 intervenciones) el 10/11/2008 21:10:12
Hola a todos, estoy haciendo un trigger y necesito referenciar mi registro actual pero no se como... me explico un poco.

dentro del trigger tengo esta instruccion

select xcampo
into variable
from mitabla
where

necesito en la clausula where poder identificar el registro donde estoy parado actualmente... lo intente con el campo llave primaria agregando esto

select xcampo
into variable
from mitabla
where

como lo hago ??? estuve leyendo algo del rowid pero no pude hacerlo... no tengo mucha experiencia con plsql...

muchas gracias

CarlosA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Referenciar mi registro actual

Publicado por Rodolfo Reyes (59 intervenciones) el 11/11/2008 16:21:06
No es necesario que hagas un query para ver la información del registro actual, que disparo el trigger.

Imagina que tienes una tabla que se llama empleado con la siguiente estructura:

empleado
(id number,
nombre varchar2(100),
fec_nacimeinto date,
fec_ingreso date,
)

Y haces el siguiente trigger

create or replace TRIGGER esquema.altera_empleado BEFORE INSERT OR DELETE OR UPDATE ON esquema.empleado FOR EACH ROW REFERENCING NEW AS N OLD AS O FOR EACH ROW

begin

--Si es un update los valores viejos del registro los puedes ver como
:o.id
:o.nombre
:o.Fec_nacimiento
:o.fec_ingreso

--Si fuera un update y quisieras ver los valores nuevos, o fuera un insert y quisieras ver los valores que estas insertando los verias con

:n.id
:n.nombre
:n.Fec_nacimiento
:n.fec_ingreso

--Utililzas N y O, porque en el encabezado del trigger indicaste que utilizararias estos dos alias para referirte a los valores viejos y a las nuevos, pero puedes utilizar cualquier nombre o letra que quieras como alias.

end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar mi registro actual

Publicado por CarlosA (2 intervenciones) el 11/11/2008 17:13:38
Hola.. gracias por contestar...lo que quiero hacer es lo siguiente:

Tengo un programa donde capturan el nombre de la ciudad y necesito que internamente se llene un campo con el codigo de ciudad, en la misma tabla. Lo debo hacer a nivel de la base de datos pues no tengo acceso al programa fuente, mi idea es mediante el trigger llenar ese campo codigo de ciudad, lo trato de hacer asi:

CREATE OR REPLACE TRIGGER aiu_c_location_city
AFTER INSERT OR UPDATE ON CITY
ON C_LOCATION
FOR EACH ROW
DECLARE
v_c_country_id c_location.c_country_id%type;
v_c_region_id c_location.c_region_id%type;
v_city c_location.city%type;
v_c_city_id c_location.c_city_id%type;
BEGIN

-- aca guardo en tres variables el codigo de pais, region y el nombre de ciudad que acaba de digitar el usuario

select cl.c_country_id,cl.c_region_id,cl.city
into v_c_country_id,v_c_region_id,v_city
from c_location cl
where cl.c_location_id = :new.c_location_id;
-- c_location_id es la llave de mi tabla... esta bien referenciar asi mi registro actual???

-- ahora traigo a una variable, de mi tabla de ciudades el codigo de la ciudad, usando las variables de codigo de pais, region y el nombre de ciudad

select cc.c_city_id
into v_c_city_id
from c_city cc
where cc.c_country_id = v_c_country_id and
cc.c_region_id = v_c_region_id and
TRIM(cc.name) = TRIM(v_city);

-- ahora actualizo sobre el registro que estoy ubicado el campo codigo de ciudad con la variable que traje en el query anterior

UPDATE c_location SET c_city_id = v_c_city_id
WHERE c_location_id = :old.c_location_id ;
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('LA CIUDAD NO EXISTE');
END aiu_c_location_city;

No se si este funcionando pq me sale que la tabla esta mutando o algo asi, tengo entendido que es porque estoy haciendo un update dentro del trigger???? como lo arreglo??

Esta bien la logica que estoy empleando??? el trigger lo tengo que hacer AFTER O BEFORE??

muchas gracias...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Referenciar mi registro actual

Publicado por reyes ruano (59 intervenciones) el 11/11/2008 20:47:15
Lo unico que debes de cambiar es el UPDATE, ya que no es necesrio que lo utilices.

En vez del update

UPDATE c_location SET c_city_id = v_c_city_id
WHERE c_location_id = :old.c_location_id ;

Solo tendria que poner:

--Recuerda que en el NEW llevas los datos que se guardaran en la base de datos del registro actual.
:new.c_city_id := v_c_city_id;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar