Duda Trigger Oracle
Muy buenas:
Tengo una duda, he creado un trigger para mi base de datos de oracle 10g, lo que quiero hacer es que cuando un registro cambie a estado 5000 cree una linea en una tabla, la duda que tengo es que ¿donde sabe la tabla que es? por que yo le digo la tabla donde coje los datos pero no sabe donde los tiene que copiar, adjunto codigo:
CREATE OR REPLACE TRIGGER ORCL.TRGEXPEDICION
BEFORE INSERT
ON MOVIANTO.VDBULTOCAB
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE CODIGOBULTO VARCHAR2(20);NUMEROPEDIDO VARCHAR2(20);DIVISION VARCHAR2(4);ALBARAN VARCHAR2(1);CODAGE VARCHAR2(4);FECHAINSERT DATE;FECHASCAN DATE;NOMBREUSUARIO varchar2(20);PALET varchar2(3);NUMEROBULTO varchar2(3);
BEGIN
IF :new.status = 5000 THEN
SELECT codbulto into codigobulto
FROM vdbultocab
WHERE codigobulto=:new.codbulto;
SELECT codped into numeropedido
FROM vdbultocab
WHERE numeropedido=:new.codped;
SELECT coddiv into division
FROM vdbultocab
WHERE division=:new.coddiv;
SELECT swtllevaalb into albaran
FROM vdbultocab
WHERE albaran=:new.swtllevaalb;
FECHAINSERT := to_date(to_char(to_date(:new.FECFINALIZA,'J'),'yyyymmdd')||' '||:new.HORAFINALIZA,'yyyymmdd hh24:mi:ss');
FECHASCAN := null;
NOMBREUSUARIO := null;
PALET := null;
end if;
END TRGEXPEDICION;
/
Gracias
Tengo una duda, he creado un trigger para mi base de datos de oracle 10g, lo que quiero hacer es que cuando un registro cambie a estado 5000 cree una linea en una tabla, la duda que tengo es que ¿donde sabe la tabla que es? por que yo le digo la tabla donde coje los datos pero no sabe donde los tiene que copiar, adjunto codigo:
CREATE OR REPLACE TRIGGER ORCL.TRGEXPEDICION
BEFORE INSERT
ON MOVIANTO.VDBULTOCAB
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE CODIGOBULTO VARCHAR2(20);NUMEROPEDIDO VARCHAR2(20);DIVISION VARCHAR2(4);ALBARAN VARCHAR2(1);CODAGE VARCHAR2(4);FECHAINSERT DATE;FECHASCAN DATE;NOMBREUSUARIO varchar2(20);PALET varchar2(3);NUMEROBULTO varchar2(3);
BEGIN
IF :new.status = 5000 THEN
SELECT codbulto into codigobulto
FROM vdbultocab
WHERE codigobulto=:new.codbulto;
SELECT codped into numeropedido
FROM vdbultocab
WHERE numeropedido=:new.codped;
SELECT coddiv into division
FROM vdbultocab
WHERE division=:new.coddiv;
SELECT swtllevaalb into albaran
FROM vdbultocab
WHERE albaran=:new.swtllevaalb;
FECHAINSERT := to_date(to_char(to_date(:new.FECFINALIZA,'J'),'yyyymmdd')||' '||:new.HORAFINALIZA,'yyyymmdd hh24:mi:ss');
FECHASCAN := null;
NOMBREUSUARIO := null;
PALET := null;
end if;
END TRGEXPEDICION;
/
Gracias
Hola Capoeira,
solo tienes que hacer un pequeño cambio en tu trigger de BD,
IF :new.status = 5000 THEN
--------------------------queda igual---------
SELECT codbulto into bulto
FROM vdbultocab
WHERE codigobulto=:new.codbulto;
SELECT codped into numeropedido
FROM vdbultocab
WHERE numeropedido=:new.codped;
SELECT coddiv into division
FROM vdbultocab
WHERE division=:new.coddiv;
SELECT swtllevaalb into albaran
FROM vdbultocab
WHERE albaran=:new.swtllevaalb;
FECHAINSERT := to_date(to_char(to_date(:new.FECFINALIZA,'J'),'yyyymmdd')||' '||:new.HORAFINALIZA,'yyyymmdd hh24:mi:ss');
FECHASCAN := null;
NOMBREUSUARIO := null;
PALET := null;
-----------------------------------------------------
insert into NombreDeTuTabla( campo1, campo2....)
values(codigobulto, numeropedido,.....);
end if;
espero te sirva, saludos.
END TRGEXPEDICION;
/
solo tienes que hacer un pequeño cambio en tu trigger de BD,
IF :new.status = 5000 THEN
--------------------------queda igual---------
SELECT codbulto into bulto
FROM vdbultocab
WHERE codigobulto=:new.codbulto;
SELECT codped into numeropedido
FROM vdbultocab
WHERE numeropedido=:new.codped;
SELECT coddiv into division
FROM vdbultocab
WHERE division=:new.coddiv;
SELECT swtllevaalb into albaran
FROM vdbultocab
WHERE albaran=:new.swtllevaalb;
FECHAINSERT := to_date(to_char(to_date(:new.FECFINALIZA,'J'),'yyyymmdd')||' '||:new.HORAFINALIZA,'yyyymmdd hh24:mi:ss');
FECHASCAN := null;
NOMBREUSUARIO := null;
PALET := null;
-----------------------------------------------------
insert into NombreDeTuTabla( campo1, campo2....)
values(codigobulto, numeropedido,.....);
end if;
espero te sirva, saludos.
END TRGEXPEDICION;
/