Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/12/2009, 12:50
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Cita:
la unica clave de esta tabla es idnum que es autoincrementable, no hay otra PK
No me refiero a que haya otra PK, ya que por definición no pueden existir dos PK en la misma tabla. Me refiero a eso:
Cita:
CREATE TABLE `unidad_zn` (
`idnum` int(11) NOT NULL auto_increment,
`unidad_zn` varchar(5) NOT NULL,
`descripcion` varchar(50) NOT NULL,
`dominio` varchar(20) default NULL,
PRIMARY KEY (`idnum`,`unidad_zn`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
En ese caso estás definiendo una PK basada en dos campos, cuando debería ser en uno sólo, ya que el campo idnum es autoincremental, y en MySQL un campo autoincremental es PK por default.
El problema es que al poner un campo doble se te producen dos inconvenientes:
1. Tienes que ingresar si o sí los dos valores (incluyendo el idnum).
2. No puedes asegurar que no se repita unidad_zn en una PK, ya que el primer componente siempre variará aunque unidad_zn sea igual, con lo que la integridade de clave primaria existirá, pero no la unicidad de unidad_zn.

¿Se entiende?

Lo que puede suceder es esto:
Cita:
idnum unidad_zn descripcion dominio
1 VI SEXTA REGION BNILAHUE
2 VIII OCTAVA REGION BNILAHUE
3 RM REGION METROPOLITANA BNILAHUE
4 VIII OCTAVA REGION BNILAHUE
5 VIII OCTAVA REGION BNILAHUE
6 VIII OCTAVA REGION BNILAHUE
7 RM REGION METROPOLITANA BNILAHUE
A eso me refiero con que la clave primaria está mal definida en esa tabla.

Cita:
PUEDO DE ALGUNA MANERA REVISAR LA EJECUCION DEL PROCEDIMIENTO, ALGO ASI COMO ITERARLO???
No. Los stored procedures no son debuggeables porque corren en un subproceso encapsulado en la base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)