Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Oracle
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 21
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
Responder Con Cita
  #2  
Antiguo 07-05-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
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
Responder Con Cita
  #3  
Antiguo 07-05-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 21
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


……………………………………………………………………………………………………..
Responder Con Cita
  #4  
Antiguo 25-08-2007
marroquinlf marroquinlf is offline
Registrado
 
Registrado: ago 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.
Responder Con Cita
  #5  
Antiguo 27-08-2007
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
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

Última edición por jachguate fecha: 27-08-2007 a las 16:16:37.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:06:51.


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