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

Procedimiento con insert

Estas en el tema de Procedimiento con insert en el foro de Mysql en Foros del Web. hola amigos he estado intentando utilizar procedimientos para optimizar mis bases de datos y mis software, tengo el siguiente codigo @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver ...
  #1 (permalink)  
Antiguo 18/11/2010, 04:07
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Busqueda Procedimiento con insert

hola amigos he estado intentando utilizar procedimientos para optimizar mis bases de datos y mis software, tengo el siguiente codigo

Código MySQL:
Ver original
  1. CREATE PROCEDURE setRegistrados(IN nom VARCHAR(120),IN email VARCHAR(120),IN cel VARCHAR(10))
  2. INSERT INTO registrados SET regnom=nom,regemail=email,regcel=cel;

lo he intentado con insert into nom_tabla into, y con el codigo que puse, pero no me crea el procedimiento no se que error tenga le agradezco por su ayuda, ahora otra cosa, en oracle para crear una variable a partir del tipo de dato ya definido en una columna simplemente se pone nom_variable nom_tabla.nom_campo%type;
en mysql como hago esto, muchas gracias amigos por ayudarme lo mas pronto posible con estas dos inquietudes.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #2 (permalink)  
Antiguo 18/11/2010, 04:13
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 con insert

Esa no es la sintaxis de INSERT. Estás haciendo un híbrido entre el INSERT y el UPDATE...
13.2.4. Sintaxis de INSERT
__________________
¿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 18/11/2010, 05:00
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Procedimiento con insert

me funciono muy bien quitando unicamente el begin y el end

con ambos codigos tu me decias con este:

Código MySQL:
Ver original
  1. CREATE PROCEDURE setRegistrados(IN nom VARCHAR(120),IN email VARCHAR(120),IN cel VARCHAR(10))
  2. INSERT INTO registrados (regnom,regemail,regcel) VALUES (nom,email,cel);

cualquiera de los dos insert es lo mismo, la sintaxis esta bien, ahora tengo otro problema no se como voy con esta funcion no se cual sea mi error:

Código MySQL:
Ver original
  1. DELIMITER
  2. CREATE FUNCTION getRegistrados(nom VARCHAR(120),email VARCHAR(120),cel VARCHAR(10))
  3. SET ide=LAST_INSERT_ID(CALL setRegistrados(nom,email,cel));
  4. RETURN ide;

mi IDE muestra lo siguiente:

Error Code : 1193
Unknown system variable 'ide'

Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000

pero no se ahi la estoy declarando porque me dice que no existe???

gracias por tu ayuda.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #4 (permalink)  
Antiguo 18/11/2010, 05:55
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 con insert

Cita:
me funciono muy bien quitando unicamente el begin y el end
Porque tienes una sola sentencia en el SP. Si necesitases dos o más ya tienes que usar BEGIN/END y usar DELIMITER para poder meterlo por consola o script.
Respecto del otro, un SP no produce una salida que sea válida para un LAST_INSERT_ID(). El parámetro que espera la función es un entero, y un SP no lo genera.
Un SP sólo puede devolver datos en parámetros o bien como tabla resultado (aunque tenga un sólo campo), pero una tabla no es un parámetro válido para LAST_INSERT_ID().
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/11/2010, 05:57
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Procedimiento con insert

ya listo ok ya me habia fijado en eso osea el codigo quedaria asi???

Código MySQL:
Ver original
  1. DELIMITER //
  2.       CREATE FUNCTION getRegistrados(nom VARCHAR(120),email VARCHAR(120),cel VARCHAR(10))
  3.       RETURNS INT
  4.       BEGIN
  5.       DECLARE ide INT DEFAULT 1;
  6.       RETURN ide;
  7.       END

muchas gracias
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #6 (permalink)  
Antiguo 18/11/2010, 06:35
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 con insert

En realidad yo haría:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS setRegistrados$$
  3. CREATE PROCEDURE setRegistrados(IN nom VARCHAR(120),IN email VARCHAR(120),IN cel VARCHAR(10), OUT id INT)
  4.     INSERT INTO registrados (regnom,regemail,regcel) VALUES (nom,email,cel);
  5.     SET id = LAST_ISERT_ID();
  6. END$$
  7. DELIMITER;

Y después:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE FUNCTION getRegistrados(nom VARCHAR(120),email VARCHAR(120),cel VARCHAR(10))
  3.       RETURNS INT
  4.       DECLARE ide INT DEFAULT 1;
  5.       CALL setRegistrados(nom,email,cel, ide);
  6.       RETURN ide;
  7. END$$
  8. DELIMITER;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/11/2010, 06:44
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 15 años, 8 meses
Puntos: 15
Respuesta: Procedimiento con insert

empezemos por aqui esta es la version que yo tengo

MySQL VERSION: 5.0.91-LOG

y me sigue apareciendo el mismo error

Error Code : 1193
Unknown system variable 'ide'

Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Total Time : 00:00:00:000

o en el caso del procedimiento el mismo sino que con id

gracias, no se si sea la version, o quien sabe que diablos sea, pero muchas gracias por tu tiempo
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co
  #8 (permalink)  
Antiguo 18/11/2010, 07:05
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 con insert

Verifico...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 18/11/2010, 07:26
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 con insert

Probé:
Código MySQL:
Ver original
  1. mysql> DELIMITER $$
  2. mysql> DROP PROCEDURE IF EXISTS `setRegistrados`$$
  3. Query OK, 0 rows affected (0.00 sec)
  4.  
  5. mysql> CREATE PROCEDURE  `setRegistrados`(
  6. ->     IN nom VARCHAR(120),
  7. ->     IN email VARCHAR(120),
  8. ->     IN cel VARCHAR(10),
  9. ->     OUT id INT)
  10. ->     BEGIN
  11.     ->     INSERT INTO registrados (regnom,regemail,regcel) VALUES (nom,email,cel);
  12.     ->     SET id = LAST_INSERT_ID();
  13.     -> END $$
  14. Query OK, 0 rows affected (0.00 sec)
  15.  
  16. mysql> DELIMITER ;
  17. mysql> DELIMITER $$
  18. mysql> DROP FUNCTION IF EXISTS `getRegistrados`$$
  19. Query OK, 0 rows affected (0.00 sec)
  20.  
  21. mysql> CREATE FUNCTION  `getRegistrados`(
  22. ->     nom VARCHAR(120),
  23. ->     email VARCHAR(120),
  24. ->     cel VARCHAR(10)) RETURNS int(11)
  25. ->     BEGIN
  26.     ->       DECLARE ide INT DEFAULT 1;
  27.     ->       CALL setRegistrados(nom,email,cel, ide);
  28.     ->       RETURN ide;
  29.     -> END;
  30.     ->
  31.     ->  $$
  32. Query OK, 0 rows affected (0.01 sec)
  33.  
  34. mysql> DELIMITER ;
  35. mysql> SELECT getRegistrados('aaaaaaaa','bbbbbbbb','cccccccc') insertado;
  36. +-----------+
  37. | insertado |
  38. +-----------+
  39. |         1 |
  40. +-----------+
  41. 1 row in set (0.00 sec)
  42.  
  43. mysql> SELECT getRegistrados('aaaaaaaa','bbbbbbbb','cccccccc') insertado;
  44. +-----------+
  45. | insertado |
  46. +-----------+
  47. |         2 |
  48. +-----------+
  49. 1 row in set (0.00 sec)
  50.  
  51. mysql> SELECT getRegistrados('aaaaaaaa','bbbbbbbb','cccccccc') insertado;
  52. +-----------+
  53. | insertado |
  54. +-----------+
  55. |         3 |
  56. +-----------+
  57. 1 row in set (0.00 sec)

Como puedes apreciar, el código está perfectamente reconocido y funcional. Puede ser que tengas un error en la forma de ingresar los datos.
¿Cómo lo estás haciendo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert, procedimiento
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:48.