Dentro de los triggers solo se pueden usar los objetos relacionados con la acción, en este caso el insert maneja el new y el old (cuando se usa con el BEFORE) y estos se refieren a los valores que se mandan en el insert ej. Insert into país values(2, “Mexico”) . Por esto mismo no se puede obtener el objeto sequence por que cuando se usa en el insert como sq_pais.nextval esto es igual a un valor de tipo entero y es a lo único que podernos referenciar dentro del trigger a un numero y no al objeto sequence, que serviría para poder compara que secuencia es la que esta utilizando en el insert y si corresponde a la tabla.
Los triggers solo pueden dispararse en las siguientes acciones:
• A database manipulation (DML) statement (DELETE, INSERT, or UPDATE)
• A database definition (DDL) statement (CREATE, ALTER, or DROP)
• A database operation (SERVERERROR, LOGON, LOGOFF, STARTUP, or SHUTDOWN)
Así que no hay un trigger que pudiera dispararse cuando se uiliza un sequence o cuando se ejecuta el nextval del sequence.
Mi recomendación sería asignar el sequence dentro del trigger y no en los parámetros del insert. Ejemplo del trigger:
Insert into país(clave_cont, nombre_pais) values(2, “Mexico”);
CREATE OR REPLACE TRIGGER secuencia3
before insert on pais
for each row
begin
SELECT SEQ_PAIS.NEXTVAL INTO :NEW.clave FROM DUAL;
end;
miércoles, 12 de mayo de 2010
Suscribirse a:
Entradas (Atom)