tengo problemas al cambiar de firebird 1.5 a 2.5 con un procedimiento alguien me puede ayudar por favor es importante .
En firebird 1.5 funciona bien pero en 2.5 saca una falla
fmprocView_1.StoredProc:
This column cannot be update becauseit is derived from an sql fuction or expression. attempted update of read-only column.
este es el codigo del procedimiento
CREATE PROCEDURE PRO_DELACTIVIDADPYP (
IDCAB_FAC INTEGER,
ID_DETFAC INTEGER)
ASdeclare variable cantidad1 integer;
declare variable fecha_fac date;
declare variable idcab_fac1 integer;
declare variable maximo integer;
declare variable medida_pyp integer;
declare variable id_actxprog integer;
declare variable id_paciente integer;
declare variable cantidad integer;
declare variable id_historicopyp integer;
declare variable hayejecutadas integer;
declare variable esquemaactivo integer;
BEGIN
/*
select distinct planeacionxesquema.id_plaxactxpro from planeacionpyp
inner join planeacionxesquema on (planeacionpyp.id_planxactxpro = planeacionxesquema.id_plaxactxpro)
where planeacionpyp.idcab_fac=:idcab_fac and
planeacionxesquema.estado='T'
into :esquemaactivo;
*/
/* Procedure body */
if (:ID_DETFAC=0) then
BEGIN
for select HISTORICO_PYP.id_historicopyp, HISTORICO_PYP.id_paciente,
historico_pyp.id_actpyp, historico_pyp.cant from historico_pyp
where historico_pyp.idcab_fac=:idcab_fac
into :id_historicopyp, :id_paciente, :id_actxprog, :cantidad do
begin
if (:cantidad>0) then
begin
UPDATE PERSONAS_ACTIVIDADPYP
SET NRO_ACTIVIDADES = (NRO_ACTIVIDADES + :CANTIDAD),
ESQUEMA_TERMINADO = 'F'
WHERE ID_ACTIVIDADPYP = :ID_ACTXPROG AND
ID_PACIENTE = :ID_PACIENTE;
DELETE FROM HISTORICO_PYP
WHERE historico_pyp.id_historicopyp=:id_historicopyp;
--SI ES UNA VACUNA, DEBE ELIMINAR EL HISTORICO DE LA DOSIS APLICADA
DELETE FROM VACUNASXAFILIADO
WHERE VACUNASXAFILIADO.ID_HISTORICOPYP = :ID_HISTORICOPYP;
/*modificacion */
select distinct planeacionxesquema.id_plaxactxpro from planeacionpyp
inner join planeacionxesquema on (planeacionpyp.id_planxactxpro = planeacionxesquema.id_plaxactxpro)
where planeacionpyp.idcab_fac=:idcab_fac and
planeacionxesquema.estado='T' and planeacionpyp.id_actxpro=:id_actxprog
into :esquemaactivo;
select count(*) from planeacionpyp
inner join planeacionxesquema on (planeacionpyp.id_planxactxpro = planeacionxesquema.id_plaxactxpro)
where planeacionpyp.ejecutado='T' AND
planeacionpyp.id_paciente=:id_paciente and
planeacionpyp.id_actxpro=:id_actxprog and
planeacionxesquema.id_plaxactxpro=:esquemaactivo
into :hayejecutadas;
if (:hayejecutadas=1) then
begin
delete from planeacionpyp where
planeacionpyp.id_planxactxpro=:esquemaactivo;
delete from planeacionxesquema
where planeacionxesquema.id_actxprog=:id_actxprog
and planeacionxesquema.id_paciente=:id_paciente and
planeacionxesquema.estado='T';
end
else if (:hayejecutadas>1) then
Begin
/*actualizacion de actividades ejecutadas*/
update planeacionpyp set planeacionpyp.idcab_fac=Null,
planeacionpyp.id_contrato=Null,
planeacionpyp.cantidad=Null, planeacionpyp.ejecutado='F', planeacionpyp.id_detfac=Null,
planeacionpyp.id_contratops=null
where planeacionpyp.id_paciente=:id_paciente and
planeacionpyp.id_actxpro=:id_actxprog and
planeacionpyp.idcab_fac=:idcab_fac;
end
end
end
END
ELSE
BEGIN
select HISTORICO_PYP.id_historicopyp, HISTORICO_PYP.id_paciente,
historico_pyp.id_actpyp, historico_pyp.cant from historico_pyp
where historico_pyp.idcab_fac=:idcab_fac and historico_pyp.id_detfac=:id_detfac
into :id_historicopyp, :id_paciente, :id_actxprog, :cantidad;
if (:cantidad>0) then
begin
UPDATE PERSONAS_ACTIVIDADPYP
SET NRO_ACTIVIDADES = (NRO_ACTIVIDADES + :CANTIDAD),
ESQUEMA_TERMINADO = 'F'
WHERE ID_ACTIVIDADPYP = :ID_ACTXPROG AND
ID_PACIENTE = :ID_PACIENTE;
DELETE FROM HISTORICO_PYP
WHERE historico_pyp.id_historicopyp=:id_historicopyp;
--SI ES UNA VACUNA, DEBE ELIMINAR EL HISTORICO DE LA DOSIS APLICADA
DELETE FROM VACUNASXAFILIADO
WHERE VACUNASXAFILIADO.ID_HISTORICOPYP = :ID_HISTORICOPYP;
select distinct planeacionxesquema.id_plaxactxpro from planeacionpyp
inner join planeacionxesquema on (planeacionpyp.id_planxactxpro = planeacionxesquema.id_plaxactxpro)
where planeacionpyp.idcab_fac=:idcab_fac and
planeacionxesquema.estado='T' and planeacionpyp.id_actxpro=:id_actxprog
into :esquemaactivo;
select count(*) from planeacionpyp
inner join planeacionxesquema on (planeacionpyp.id_planxactxpro = planeacionxesquema.id_plaxactxpro)
where planeacionpyp.ejecutado='T' AND
planeacionpyp.id_paciente=:id_paciente and
planeacionpyp.id_actxpro=:id_actxprog and
planeacionxesquema.id_plaxactxpro=:esquemaactivo
into :hayejecutadas;
if (:hayejecutadas=1) then
begin
delete from planeacionpyp where
planeacionpyp.id_planxactxpro=:esquemaactivo;
delete from planeacionxesquema
where planeacionxesquema.id_actxprog=:id_actxprog
and planeacionxesquema.id_paciente=:id_paciente and
planeacionxesquema.estado='T';
end
--else if (:hayejecutadas>1) then
--Begin
/*actualizacion de actividades ejecutadas*/
/* update planeacionpyp set planeacionpyp.idcab_fac=Null,
planeacionpyp.id_contrato=Null,
planeacionpyp.cantidad=Null, planeacionpyp.ejecutado='F', planeacionpyp.id_detfac=Null,
planeacionpyp.id_contratops=null
where planeacionpyp.id_paciente=:id_paciente and
planeacionpyp.id_actxpro=:id_actxprog and
planeacionpyp.idcab_fac=:idcab_fac;
end*/
end
END
SUSPEND;
END