trigger example ejemplos compound triggers oracle11g

triggers - example - trigger oracle ejemplos



Problemas al crear un disparador en Oracle 11g (3)

Recibo un error extraño al intentar crear un desencadenante en mi base de datos Oracle 11g utilizando SQL Developer. Aquí esta lo que hice:

Mi mesa:

CREATE TABLE COUNTRY_CODE( ID NUMBER(19,0) PRIMARY KEY NOT NULL, Code VARCHAR2(2) NOT NULL, Description VARCHAR2(50), created TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_by VARCHAR2(40) DEFAULT USER, last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP, last_updated_by VARCHAR2(40) DEFAULT USER, archived CHAR(1) DEFAULT ''0'' NOT NULL );

La secuencia:

CREATE SEQUENCE COUNTRY_CODE_ID_SEQ START WITH 1 INCREMENT BY 1;

El gatillo:

CREATE OR REPLACE TRIGGER COUNTRY_CODE_TRIGGER BEFORE INSERT ON COUNTRY_CODE FOR EACH ROW DECLARE max_id number; cur_seq number; BEGIN IF :new.id IS NULL THEN SELECT COUNTRY_CODE_ID_SEQ.nextval INTO :new.id FROM dual; ELSE SELECT GREATEST(NVL(MAX(id),0), :new.id) INTO max_id FROM COUNTRY_CODE; SELECT COUNTRY_CODE_ID_SEQ.nextval INTO cur_seq FROM dual; WHILE cur_seq < max_id LOOP SELECT COUNTRY_CODE_ID_SEQ.nextval INTO cur_seq FROM dual; END LOOP; END IF; END;

La creación de la tabla y la secuencia funciona muy bien, pero cuando intento crear mi activador, aparece este error:

Error report: ORA-00603: ORACLE server session terminated by fatal error ORA-00600: internal error code, arguments: [kqlidchg0], [], [], [], [], [], [], [], [], [], [], [] ORA-00604: error occurred at recursive SQL level 1 ORA-00001: unique constraint (SYS.I_PLSCOPE_SIG_IDENTIFIER$) violated 00603. 00000 - "ORACLE server session terminated by fatal error" *Cause: An ORACLE server session is in an unrecoverable state. *Action: Login to ORACLE again so a new server session will be created

¿Alguien sabe acerca de este error?

Gracias


Finalmente encontré la respuesta a mi problema:

Agrega esto:

ALTER SESSION SET PLSCOPE_SETTINGS = ''IDENTIFIERS:NONE'';

O en Oracle SQL Developer:

  1. Ir a Herramientas | Preferencias
  2. Seleccionar base de datos | Compilador PL / SQL
  3. Cambie los identificadores de PLScope de todos a ninguno
  4. Haga clic en ok

Esto soluciona el problema ...


No tengo otra solución (y no tengo la reputación de simplemente comentar), pero aquí hay información que podría ayudar a que alguien esté en el camino correcto para resolver este problema mientras sigue usando PL / Scope.

Acabo de tener un problema similar, y buscar en la función PL / Scope me ayudó a entender dónde podría surgir el problema. Para mi problema, intenté crear un desencadenador y surgió el mismo error exacto. Cambié el cuerpo del gatillo en vano, pero cambiar el nombre funcionó bien.

Parece que el PL / Scope mantenía información sobre el primer disparador instanciado, antes de soltarlo. Una consulta sobre los desencadenantes reveló que mi desencadenante seguramente se eliminó, pero una consulta sobre los identificadores (PL / Scope) ("all_identifiers") mostró que todavía estaba allí.

Aquí hay información sobre PL / Scope: http://www.oracle.com/technetwork/testcontent/o67asktom-101004.html

El Capítulo 8 aquí (documentación 11g) tiene más información: http://docs.oracle.com/cd/B28359_01/appdev.111/b28424.pdf


Puede haber una solución para esto here.