Acabo de desperdiciar las dos últimas horas de mi vida tratando de crear una tabla con un aumento automático de las claves principales en this tutorial, El tutorial es genial, el problema que me he encontrado es que el objetivo de creación falla si tengo una columna que es una marca de tiempo y una tabla que se denomina marca de tiempo en la misma tabla ...Oracle ¿por qué falla la creación del disparador cuando hay un campo llamado marca de tiempo?
¿Por qué Oracle no señala esto como un problema cuando creo la tabla?
Aquí es la secuencia de comandos entro:
Crear la tabla:
CREATE TABLE myTable (ID de la llave número primario, campo1 marca de tiempo (6), NÚMERO timeStamp,
);
Creación de la secuencia:
CREATE SEQUENCE test_sequence START CON 1 incrementan en 1;
Crear el gatillo:
CREAR O SUSTITUIR TRIGGER test_trigger ANTES INSERT EN myTable referencia a nuevas AS NEW FOR EACH ROW COMENZAR test_sequence.nextval SELECT INTO: NEW.ID de la doble; END; /
Aquí está el mensaje de error que consigo:
ORA-06552: PL/SQL: Compilation unit analysis terminated
ORA-06553: PLS-320: the declaration of the type of this expression is incomplete or malformed
Cualquier combinación que no tiene las dos líneas con una la palabra "marca de tiempo" en ellos funciona bien. Pensé que la sintaxis sería suficiente para diferenciar entre la palabra clave y el nombre de una columna.
Como ya he dicho que no entiendo por qué se crea la tabla fina pero Oracle se cae cuando trato de crear el gatillo ...
CLARIFICACION
sé que la cuestión es que hay una columna llamada marca de tiempo que puede ser o no una palabra clave. MI problema es por qué se descompuso cuando intenté crear un activador y no cuando creé la tabla, al menos esperaba una advertencia.
Dicho esto, habiendo usado Oracle por algunas horas, parece mucho menos detallado en su informe de errores, tal vez solo porque estoy usando la versión expresa.
Si esto es un error en Oracle, ¿cómo alguien que no tiene un contrato de soporte puede informarlo? Solo estoy jugando con la versión express porque tengo que migrar algún código de MySQL a Oracle.
Este problema es relativamente frustrante si tiene una base de datos anterior con una columna de tabla llamada 'timestamp' y desea agregar un desencadenador a ella. No he encontrado una forma de evitarlo, pero me temo. Sin embargo, he usado la respuesta de Pablo para problemas de nombres de marcas de tiempo similares. –