FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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 |
#3
|
|||
|
|||
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 …………………………………………………………………………………………………….. |
#4
|
|||
|
|||
Cara Oculta Delphi 6
Saludos,
Ya que tienes el libro de cara oculta delphi 6, podrias proporcionarme una copia digital para poder leerlo. Gracias. |
#5
|
||||
|
||||
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|