validate trigger modify disable compile oracle oracle11g oracle-sqldeveloper

disable - oracle modify trigger



Crear un disparador en Oracle Express (4)

Intentaba hacer algo así como autoincremento en Oracle 11g Express y SQL Developer. Sé muy poco sobre Oracle y también soy nuevo en los factores desencadenantes.

Intenté ejecutar esto, pero no sé cómo hacerlo correctamente.

CREATE TABLE theschema.thetable (id NUMBER PRIMARY KEY, name VARCHAR2(30)); CREATE SEQUENCE theschema.test1_sequence START WITH 1 INCREMENT BY 1; create or replace trigger insert_nums before insert on theschema.thetable for each row begin select test1_sequence.nextval into :new.id from dual; end; /

Cuando intento crear el disparador, aparece una pantalla que me pide algunos "enlaces". El cuadro de diálogo tiene solo una casilla de verificación "nulo". ¿Qué significa esto y cómo hago un script que funcione correctamente?

¿Alguna precaución que tomar al hacer este tipo de "autoincremento"?


Así es como he resuelto este problema, pongo "set define off"; antes del comando:

set define off; create or replace trigger [...] [...] end; /

A continuación, resalte ambos comandos y presione F9 para ejecutar. O puede ejecutar todos los comandos con F5.

Parece que si los comandos se ejecutan por separado con F9, entonces el conjunto definido no tiene efecto.


Para mi caso, la solución fue ingresar "newrow" para "nuevo" y "oldrow" para "old" como valores para los binds ...


Parece que SQL Developer cree que está ejecutando un script simple de DML (manipulación de datos), no un DDL (definición de datos). También piensa que :new.id es una variable :new.id .

Por qué sucede esto, no sé; No puedo reproducirlo en Oracle SQL Developer 2.1.

Intente abrir una nueva ventana de hoja de cálculo SQL en el esquema theschema y ejecute un script "completo" (no una instrucción) presionando F5 (no F9 ).


Soy un novato en esto, así que tenlo en cuenta mientras doy mi respuesta. Creo que el problema es que el código

create or replace trigger insert_nums before insert on theschema.thetable for each row begin select test1_sequence.nextval into :new.id from dual; end;

Es en realidad un script y no una declaración SQL directa. Por lo tanto, debe ejecutar el "Ejecutar script". Descubrí que cuando tenía una hoja de trabajo abierta en SQL Developer, si tenía en alguna parte de la hoja de trabajo cualquier código para activar como arriba, incluso yo solo intentaba ejecutar una declaración que SQL Developer revisara en la hoja de trabajo e intentara ejecutar el guión. Para evitar que eso ocurriera, tuve que comentar el código. Y si deseaba ejecutar el código para el desencadenante antes que abrir una nueva hoja de trabajo, coloque el código allí y ejecute una EJECUCIÓN DE ESCRITURA.