Los procedimientos almacenados se implementaron precisamente para la versión 5.0.x, por lo que tu problema no está allí: está en el código que tiene un defecto básico:
No puedes leer y borrar en la misma tabla al mismo tiempo...
Me explico: Un CURSOR abre una tabla en
modo de lectura exclusivo, por lo que automáticamente está bloqueada para toda otra acción, excepto
dirty reads. Este bloqueo
dura mientras el CURSOR esté abierto, porque en realidad estás recorriendo los registros uno a uno.
Como la tabla está bloqueada, simplemente no puedes
borrar un registro en base a una lectura de la misma tabla, y menos aún el registro sobre el que en ese momento estás parado. Sería igual que cortar la rama del árbol en la que te estás sosteniendo...
Tu segundo problema es que esta acción debería estar devolviendo un error de ejecución,
que tu no estás capturando. Es de buena programación capturar todos los mensajes de error que se producen, especialmente en la etapa de desarrollo.
Además de estas consideraciones, ese procedimiento podría ser más simple, y no estás usando en algunos casos las sentencias correctas para las acciones a realizar.
Por lo pronto, ten en cuenta que el borrado de los registros tiene una condición bastante simple:
estado debe ser 0 ó 2 y la fecha de publicación, la de hace siete días. Las dos cosas tiene forma simples de escribirse, y para las fechas es siempre mejor usar funciones que hacer operaciones aritméticas.
Eso sería simplemente:
o bien:
Si lo quieres en un SP:
Toma nota de que para asignar valores a las variables no necsitas usar SELECT INTO, sino SET. SELECT INTO se usa fundamentalmente si los valores provienen de un SELECT,, pero no si son producto de funciones u operaciones con datos ya existentes.