Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Procedimiento Almacenado

Estas en el tema de Procedimiento Almacenado en el foro de Mysql en Foros del Web. Hola gente, estoy teniendo un problema bastante molesto. Tengo 2 tablas... "usuario" y "perfil" existe una relación entre usuario y perfil a través de un ...
  #1 (permalink)  
Antiguo 31/10/2015, 11:15
 
Fecha de Ingreso: octubre-2015
Mensajes: 1
Antigüedad: 8 años, 5 meses
Puntos: 0
Procedimiento Almacenado

Hola gente, estoy teniendo un problema bastante molesto.

Tengo 2 tablas... "usuario" y "perfil"
existe una relación entre usuario y perfil a través de un atributo pefil_id, que es autoincrementable.

Luego de eso, existe un procedimiento almacenado "new_profile" cuyo código es el siguiente



Código:
BEGIN
DECLARE v_id int;

INSERT into perfil VALUES(null,name,birth,sex,country,bio,null);

SELECT DISTINCT last_insert_id() into v_id from perfil;

UPDATE usuario set usuario.id_perfil = v_id where usuario.username = p_username;
END


Los parámetros recibidos son del tipo correcto, y, cada linea por separado, funciona correctamente. Si hago sólo el insert inserta, si hago el insert y el select distinct me devuelve el last_insert_id() correctamente. e incluso si hago un update manual (sin usar la variable v_id) funciona perfectamente. Ahora, cuando ejecuto el procedimiento, simplemente no funciona, o eso aparenta (los Id autoincrementables de la tabla perfil se incrementan pero sin generar la fila correspondiente).

No se que hacer... hay alguna forma de debugear el procedimiento desde el phpmyadmin ?

Help plz...
  #2 (permalink)  
Antiguo 31/10/2015, 16:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Procedimiento Almacenado

Ok...
¿Ya te has dado cuenta de que tu duda no tiene NADA que ver con PHP, sino con MySQL, no?
Es decir, esto lo deberias haber posteado en el Foro de MySQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 31/10/2015, 17:51
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Procedimiento Almacenado

Saludo
Pues a mí me funciona sin problema alguno,
inserta el perfil, luego toma el id
y actualiza el perfil del usuario

Solo cambie pues las tablas a las que apunto, y no tantos campos para el insert.

Código SQL:
Ver original
  1. -- Se asume que name y p_username son variables de entrada
  2. -- del PROCEDURE, y que ambas son varchar
  3. INSERT INTO borrar_perfil_borrar VALUES(NULL, name);
  4. SELECT DISTINCT last_insert_id() INTO v_id FROM borrar_perfil_borrar;
  5. UPDATE borrar_usuario_borrar SET borrar_usuario_borrar.id_perfil = v_id WHERE borrar_usuario_borrar.username = p_username;

En cuanto a debuggear el procedimiento,
pues modifica el procedure para que retorne una variable int inicializada en 0,
y dale valores en distintas instancias.

Por ej luego del insert cuando haga el select, verificar el valor de v_id
y sí ese valor es mayor a 0, entonces que la variable a retornar tenga el valor 1,
y luego del update, hacer un select al usuario y verificar cual perfil tiene,
y sí el valor es el mismo de v_id que la variable a retornar tenga el valor 2

Con eso se sabrá en donde está el inconveniente,
aunque reitero que a mí me funciona sin problema.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:56.