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

ayuda con proceso almacenado.

Estas en el tema de ayuda con proceso almacenado. en el foro de Mysql en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/09/2009, 03:27
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 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
  #2 (permalink)  
Antiguo 25/09/2009, 03:55
 
Fecha de Ingreso: junio-2009
Mensajes: 174
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: ayuda con proceso almacenado.

Para declarar las variables debes de escribir lo siguiente:
DECLARE ultimoregistro CHAR(20) DEFAULT NULL;
y para asignarle valor se usa el siguiente comando:
SET ultimoregistro = 'valor';

Si el código está bien y ejecutas, en teoría tendría que guardarse bien. Si tienes dudas mira
mediante este código y te aparecerá :
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE'


Y la última pregunta, igual son palabras reservadas que tiene mysql, ante eso creo que tendras que cambiar de nombre pero no estoy seguro.
Suerte.
  #3 (permalink)  
Antiguo 25/09/2009, 04:22
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: ayuda con proceso almacenado.

buenos días alkortius, lo primero muchas gracias por contestar.

A ver si si así esta bien.

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
#->>> nueva linea añadida con la declaración de la variable.
        DECLARE ultimoregistro CHAR(20) DEFAULT NULL;
        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;
#->>>> se declara la asignación del valor.
        SET ultimoregistro = 'valor'
        INSERT INTO profile_values (fid, uid, value) VALUES (2, ultimoregistro, nombre);
        INSERT INTO users_roles (uid,rid) VALUES (ultimoregistro, rol);
    ENDIF
END$$

DELIMITER;

Gracias
  #4 (permalink)  
Antiguo 25/09/2009, 04:53
 
Fecha de Ingreso: junio-2009
Mensajes: 174
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: ayuda con proceso almacenado.

Cita:
Iniciado por oskar_calvo Ver Mensaje

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
#->>> nueva linea añadida con la declaración de la variable.
        DECLARE ultimoregistro CHAR(20) DEFAULT NULL;
        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;
#->>>> se declara la asignación del valor.
        SET ultimoregistro = 'valor'
        INSERT INTO profile_values (fid, uid, value) VALUES (2, ultimoregistro, nombre);
        INSERT INTO users_roles (uid,rid) VALUES (ultimoregistro, rol);
    ENDIF
END$$

DELIMITER;
Lo que te he puesto en negrita para que lo haces ?
  #5 (permalink)  
Antiguo 25/09/2009, 05:28
 
Fecha de Ingreso: agosto-2006
Mensajes: 219
Antigüedad: 17 años, 8 meses
Puntos: 0
Respuesta: ayuda con proceso almacenado.

He encontrado en una página web una introducción a los procesos almacenados, y en uno de los comentarios una persona hacía eso para asignar un valor a un count.

No se si esta así correctamente hecho o hay que hacerlo de otra manera, ya sabes las burradas de los novatos.

Muchas gracias

Oskar
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 15:46.