problema en procedimiento al introducir ALTER TABLE

tema enviado por Antoñitooo en ORACLE
tema iniciado el 29/11/2007

Hola buenas, me gustaria saber porque me falla este procedimiento por favor:

Consiste en actualizar el campo sid y el campo fk_servicio de dos tablas que en principio estan unidas por una relacion 1 a n, de sid a fk, por eso utilizo los alter table.

create or replace
PROCEDURE ACTUALIZAR_SID IS
VA_EXP_FK_SERVICIO SEGUIMEXP3.EXPEDIENTE.FK_SERVICIO%TYPE;
VA_SERV_SID SEGUIMEXP3.SERVICIO.SID%TYPE;
VA_SERV_NOMBRE SEGUIMEXP3.SERVICIO.NOMBRE%TYPE;
VA_C_NODO RRHH.AC_ORGAN.C_NODO%TYPE;
VVA_TEMP NUMBER;
CURSOR CU_SERVICIO IS
  SELECT SEGUIMEXP3.SERVICIO.SID
        ,SEGUIMEXP3.SERVICIO.NOMBRE INTO VA_SERV_SID, VA_SERV_NOMBRE
  FROM SEGUIMEXP3.SERVICIO;

CURSOR CU_EXPEDIENTE IS
  SELECT SEGUIMEXP3.EXPEDIENTE.FK_SERVICIO INTO VA_EXP_FK_SERVICIO
  FROM SEGUIMEXP3.EXPEDIENTE;

BEGIN
  ALTER TABLE SEGUIMEXP3.EXPEDIENTE DISABLE CONSTRAINT FK_SERVICIO foreign key (SEGUIMEXP3.EXPEDIENTE.FK_SERVICIO) references SEGUIMEXP3.SERVICIO (SEGUIMEXP3.SERVICIO.SID);


  FOR R_VAL IN CU_EXPEDIENTE LOOP
    UPDATE SEGUIMEXP3.EXPEDIENTE
    SET SEGUIMEXP3.EXPEDIENTE.FK_SERVICIO = R_VAL.VA_EXP_FK_SERVICIO + 1000000;
  END LOOP;
  FOR R_VAL1 IN CU_SERVICIO LOOP
    UPDATE SEGUIMEXP3.SERVICIO
    SET SEGUIMEXP3.SERVICIO.SID = R_VAL1.VA_SERV_SID + 1000000;
  END LOOP;
  FOR R_VAL2 IN CU_SERVICIO LOOP
    SELECT RRHH.AC_ORGAN.C_NODO INTO VA_C_NODO
    FROM RRHH.AC_ORGAN
    WHERE UPPER(TRANSLATE(RRHH.AC_ORGAN.D_NODO,'ÁÉÍÓÚáéíóú','AEIOUAEIOU')) LIKE UPPER(TRANSLATE(R_VAL2.VA_SERV_NOMBRE,'ÁÉÍÓÚáéíóú','AEIOUAEIOU'));
    VVA_TEMP := R_VAL2.VA_SERV_SID;
    UPDATE SEGUIMEXP3.SERVICIO
    SET SEGUIMEXP3.SERVICIO.SID = VA_C_NODO;
    UPDATE SEGUIMEXP3.EXPEDIENTE
    SET SEGUIMEXP3.EXPEDIENTE.FK_SERVICIO = VA_C_NODO
    WHERE SEGUIMEXP3.EXPEDIENTE.FK_SERVICIO = VVA_TEMP;
  END LOOP;
   ALTER TABLE SEGUIMEXP3.EXPEDIENTE ENABLE CONSTRAINT FK_SERVICIO foreign key (SEGUIMEXP3.EXPEDIENTE.FK_SERVICIO) references SEGUIMEXP3.SERVICIO (SEGUIMEXP3.SERVICIO.SID);

  COMMIT;
  EXCEPTION WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('ERROR EN LA TRANSACCION;' || SQLERRM);
  DBMS_OUTPUT.PUT_LINE('SE DESHACEN LAS MODIFICACIONES');
  ROLLBACK;
  END;

los errores son:

  • Error(18,45): PLS-00103: Se ha encontrado el símbolo "CONSTRAINT" cuando se esperaba uno de los siguientes: , in