Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/09/2009, 03:27
oskar_calvo
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 9 meses
Puntos: 0
ayuda con proceso almacenado.

Buenos días, tengo un proceso que ahora mismo lo hago por php, pero debido al tamaño que esta adquiriendo la tabla me gustaría hacerlo mediante proceso almacenado de mysql.

En primer lugar decir que nunca he hecho un proceso almacenado, por lo que soy totalmente newbi disculpad los errores o burradas que pueda cometer o preguntar.

Lo segundo, planteo lo que necesito, y luego el código del proceso que he escrito, y a continuación las dudas que tengo.

Lo que hago es recuperar una serie de valores de la tabla a,
Compruebo si estos valores existen en la tabla b, mediante el campo id_usuario que esta en ambos.
Si existe en a y en b hago un update de los campos nombre y correo.
Si no esta en a.
inserto los valores en la tabla a
recupero el último id_uid de la tabla a
Inserto valores (otros) en la tabla b
inserto valores en la tabla c
Cierro el proceso almacenado.

Código:
DELIMITER //

CREATE PROCEDURE usuario_usuario (IN id_erp VARCHAR(12), IN Nombre VARCHAR (50), IN correo VARCHAR(50), IN creacion_usuario DATE, IN rol VARCHAR(50))
#comenzamos el procedimiento.
BEGIN
    #consultamos para ver si existe el usuario.
    SELECT COUNT(UID) INTO @CUENTA FROM users name = id_erp;
    #si nos da 1, quiere decir que existe y ejecutamos la actualización
    IF @CUENTA ==1
        UPDATE USERS SET name = id_erp, mail = correo, where name = id_erp;
    ENDIF
    #si nos da 0, quiere decir que no existe y tenemos que realizar el insert
    IF @cuenta == 0
        INSERT INTO users (name,pass,mail,mode,sort,threshold,created,access,login,status,timezone,language,init) VALUES (id_erp,'e10adc3949ba59abbe56e057f20f883e',correo,0,0,0,creacion_usuario,0,0,1,7200,'es',correo);
        SELECT LAST_INSERT_ID() AS @ultimoregistro FROM users;
        INSERT INTO profile_values (fid, uid, value) VALUES (2, ultimoregistro, nombre);
        INSERT INTO users_roles (uid,rid) VALUES (ultimoregistro, rol);
    ENDIF
END$$

DELIMITER;
mis dudas, como genero una variable en los procedimientos almacenados para guardar datos como el de SELECT LAST_INSERT_ID() AS @ultimoregistro FROM users;
¿Esta bien hecho como he hecho esto?

¿Donde y como guardo el proceso almacenado, en un archivo, en la base de datos con algún insert?

¿Algunas de los términos utilizados en las variables y en los nombres de campos como" value" y "lenguage" me los pinta como si fuesen funciones, ¿Que puedo hacer para seguir usandolos? ¿Tengo que escaparlos o comentarlos de alguna manera?.

Gracias

Oskar