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