Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Oracle
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 05/05/2003
Jose Manuel Jose Manuel is offline
Miembro
 
Join Date: May 2003
Posts: 112
Poder: 24
Jose Manuel Va por buen camino
ERROR ORA-04082: referencias NEW u OLD no permitidas en disparadores a nivel de tabla

Hola, estoy empezando a trabajar con ORACLE 9i con Delphi6, y tengo un problema para crear un trigger, pues me da el siguiente error:


ejemplo:
CREATE OR REPLACE TRIGGER "JM"."GENERAR_NUM_ORDEN"
BEFORE INSERT ON "LIQUIDA"
begin
if :new.num_orden is null then
:new.num_orden := LIQUIDA_NUM_ORDEN.nextval;
end if;
end;


el error es:
ORA-04082: referencias NEW u OLD no permitidas en disparadores a nivel de tabla

he hecho otras pruebas, pero siempre obtengo el mismo error de "NEW u OLD..."

Estoy intentando crear un contador en una tabla, que incremente un numero cada vez que se inserte un registro. He visto las "sequences" y me ha funcionado bien, pero me ha dejado algunos numeros en blanco.

Un saludo a todos.
Jose Manuel
Reply With Quote
  #2  
Old 07/05/2003
jachguate's Avatar
jachguate jachguate is offline
Miembro
 
Join Date: May 2003
Location: Guatemala
Posts: 6,254
Poder: 30
jachguate Va por buen camino
lo que ocurre es que oracle, por defecto, crea triggers por lotes, es decir, que el trigger se disparará una sola vez por cada operación update o insert sin importar cuantos registros se han afectado.

Supongo que no es lo que queres, por lo que debieras utilizar la sintaxis:

CREATE OR REPLACE TRIGGER "JM"."GENERAR_NUM_ORDEN"
BEFORE INSERT ON "LIQUIDA"
for each row
begin
if :new.num_orden is null then
:new.num_orden := LIQUIDA_NUM_ORDEN.nextval;
end if;
end;


Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Reply With Quote
  #3  
Old 07/05/2003
Jose Manuel Jose Manuel is offline
Miembro
 
Join Date: May 2003
Posts: 112
Poder: 24
Jose Manuel Va por buen camino
Gracias por la ayuda, efectivamente se trataba de incluir la sentencia FOR EACH ROW, pero una vez puesta me daba otro error, que he corregido leyendo un articulo de la "Cara Oculta de Delphi6 , pag. 313), pues yo queria crear un Disparador que activase una Sequence, con el objeto de crear un contador que no permita saltos entre numeros.

EJEMPLO DE UN DISPARADOR, (obtenido de la cara oculta delphi 6, pag. 313):

CREATE OR REPLACE TRIGGER "JM."GENERAR_NUM_ORDEN"
BEFORE INSERT OR UPDATE OF "NUM_ORDEN" ON "LIQUIDA"
FOR EACH ROW
begin
if :new.num_orden is null then
select LIQUIDA_NUM_ORDEN.NextVal
into :new.num_orden
from Dual;
end if;
end;


EJEMPLO DE UNA SECUENCIA:

CREATE SEQUENCE "JM"."LIQUIDA_NUM_ORDEN" INCREMENT BY 1
START WITH 5000 MAXVALUE 99999 MINVALUE 1 NOCYCLE
NOCACHE ORDER


Saludos a todos
Jose Manuel


……………………………………………………………………………………………………..
Reply With Quote
  #4  
Old 25/08/2007
marroquinlf marroquinlf is offline
Registrado
 
Join Date: Aug 2007
Posts: 1
Poder: 0
marroquinlf Va por buen camino
Cara Oculta Delphi 6

Saludos,
Ya que tienes el libro de cara oculta delphi 6, podrias proporcionarme una copia digital para poder leerlo.
Gracias.
Reply With Quote
  #5  
Old 27/08/2007
jachguate's Avatar
jachguate jachguate is offline
Miembro
 
Join Date: May 2003
Location: Guatemala
Posts: 6,254
Poder: 30
jachguate Va por buen camino
Ian Marteens, autor del libro, ofrece en su propia página la versión "digital" de La cara oculta de delphi, pero no el 6, sino el 4.

Del 6 está disponible, si no mal recuerdo, solamente el índice.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Last edited by jachguate : 27/08/2007 at 16:16.
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 21:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi