MySQL - Error en Prepare

   
Vista:

Error en Prepare

Publicado por Pedro (54 intervenciones) el 04/08/2013 23:43:24
Hola de nuevo

Estoy incursionando en el prepare y este procedimiento me da error
Sera que hay que instalar algo en el motor o habilitar algo? porque comento la sentencia PREPARE y compila joya, pero la coloco y me da error,
o algo estoy escribiendo o haciendo mal
Tengo un mysql 5.5 sobre w7

Gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DELIMITER $$
 
CREATE PROCEDURE `CreaUsuario`(p_user VARCHAR(20),p_pw VARCHAR(20))
BEGIN
 
DECLARE v_str	VARCHAR(1000);
DECLARE v_user  VARCHAR(20);
DECLARE v_pw    VARCHAR(20);
 
SET v_user 	= p_user;
SET v_pw	= p_pw;
 
-- Estos valores son para probar
-- SET v_user = 'user@%';
-- SET v_pw   = 'pw';
 
SET v_str = CONCAT(
		'CREATE USER ',v_user,' IDENTIFIED BY ',v_pw);
 
PREPARE stmt2 FROM v_str;
 
-- execute  stmt2;
 
-- DEALLOCATE PREPARE stmt2;
 
END$$
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de MySQL
- Cursos de MySQL
- Temas de MySQL
- Chat de MySQL
información
Cursos y Temas de MySQL
- MyODBC Reference Manual
- Manual de MySQL
- Manual de MySQL-Workbench
Imágen de perfil de xve

Error en Prepare

Publicado por xve (899 intervenciones) el 05/08/2013 08:38:13
Hola Pedro, exactamente que error te da?

Yo siempre he utilizado el prepare con consultas sql que devuelven registros... en tu caso, no devuelve ningún registro, pero puede ser que el error este en el "create user..."?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en Prepare

Publicado por Pedro (54 intervenciones) el 05/08/2013 20:22:31
Este es el error

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'v_str;

-- execute stmt2;

-- DEALLOCATE PREPARE stmt2;
END' at line 16

si le comento la linea del prepare, compila excelente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Error en Prepare

Publicado por xve (899 intervenciones) el 05/08/2013 21:00:46
Hola Pedro, tal como te comente, el problema lo tienes en la consulta, que es errónea.

Puede ser que la variable v_user y v_pw estén alguna de ellas vacías?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en Prepare

Publicado por Pedro (54 intervenciones) el 06/08/2013 04:50:01
xve, si lo de la sentencia era correcto, estaba mal, lo arregle ahora quedo bien
pero lo mismo,

cuando coloco la linea prepare me sigue dando error
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Error en Prepare

Publicado por xve (899 intervenciones) el 06/08/2013 10:26:56
Hola Pedro, si te sigue dando el mismo error, es que la instrucción sql no es correcta...

Si pruebas a poner unos valor fijos te funciona? por ejemplo, encima de la instrucción pon algo como:
1
2
SET v_str = 'CREATE USER pepito IDENTIFIED BY 123456';
PREPARE stmt2 FROM v_str;


Coméntanos si te funciona, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en Prepare

Publicado por Pedro (54 intervenciones) el 06/08/2013 17:02:53
no, te paso el procedimiento para que veas y el error abajo
el usuario lo probe con@ y sin @ con ; al final y sin el ;

estara bien definida la variable? ya no se que pensar y gracias por la preocupacion

DELIMITER $$

DROP PROCEDURE IF EXISTS `CreaUsuario`$$

CREATE PROCEDURE `CreaUsuario`(p_user VARCHAR(20),p_pw VARCHAR(20))
BEGIN

DECLARE v_str VARCHAR(1000);
DECLARE v_user VARCHAR(20);
DECLARE v_us VARCHAR(20);

DECLARE v_pw VARCHAR(20);

DELETE FROM pp;

SET v_user = p_user;
SET v_pw = p_pw;

SET v_us = CONCAT("'",v_user,"'",'@',"'",'%',"'");
SET v_pw = 'pw';

SET v_str = CONCAT(
'CREATE USER ',v_us,' IDENTIFIED BY ',"'",v_pw,"'");

INSERT INTO pp (linea) VALUES (v_str);

SET v_str = 'CREATE USER pepe IDENTIFIED BY juanito';
PREPARE stmt2 FROM v_str;

-- execute stmt2;

-- DEALLOCATE PREPARE stmt2;

END$$


(0 row(s) affected, 1 warning(s))
Execution Time : 00:00:00:110
Transfer Time : 00:00:01:107
Total Time : 00:00:01:217

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'v_str;
-- execute stmt2;
-- DEALLOCATE PREPARE stmt2;
END' at line 16

Execution Time : 00:00:00:000
Transfer Time : 00:00:00:000
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Willian

Error en Prepare

Publicado por Willian (51 intervenciones) el 06/08/2013 23:42:52
proba asi en vez de ......

SET v_str = 'CREATE USER pepe IDENTIFIED BY juanito';
PREPARE stmt2 FROM v_str;

usa asi....

SET @v_str = "CREATE USER pepe IDENTIFIED BY 'juanito' ";

/*para indicar la sentencia usas comilla doble " y para indicar el password del usuario usa comilla simples ' ya que tu password le estas enviando un varchar*/

PREPARE stmt2 FROM @v_str;


comentanos el resultado si?!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en Prepare

Publicado por Pedro (54 intervenciones) el 07/08/2013 04:01:30
Excelente William

Anduvo joya, muchas gracias

Podrias explicar la diferencia entre las variables,

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Willian

Error en Prepare

Publicado por Willian (51 intervenciones) el 07/08/2013 14:31:14
bueno explico las variables que son declaradas de esta forma @nombre_variable en cualquier Función , Procedimiento, trigger, select o sea lo que sea , se llama variable de tipo SESSION o sea solo estará disponible el valor de esa variable mientra dura la conexión con la BD ejemplo estoy conectado con 'JUAN' y el id de conexión es 255 por decir. entonces mientras no me desconecto de la BD podre ver los valores de las variables que declare como @nombre_variable cuando me re-conecto esas variables tendrán valor NULL.
para el prepare si haces referencia a una variable de tipo local en este caso "v_str" es una sintaxis equivocada por que el prepare le tenes que hacer referencia a variables de tipo SESSION.
espero tener aclarado tu duda.
cualquier cosa escribenos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error en Prepare

Publicado por Pedro (54 intervenciones) el 07/08/2013 15:27:24
Excelente y muy clara tu explicacion
Muchas gracias por todo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar