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

mysql y control de flujo. ayuda

Estas en el tema de mysql y control de flujo. ayuda en el foro de Mysql en Foros del Web. hola tengo un problema en esto de las funciones con SQL. hay algo que quiero hacer pero la cantida de material que encuentro en internet ...

  #1 (permalink)  
Antiguo 27/06/2009, 14:29
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Pregunta mysql y control de flujo. ayuda

hola tengo un problema en esto de las funciones con SQL.

hay algo que quiero hacer pero la cantida de material que encuentro en internet es muy reducida.

quiero por ejemplo:

CREATE FUNCTION check_template(id_theme int) <--- recibir un id_theme ya sea el id_theme numero 4 y luego dentro de la funcion buscar en la tabla THEMES si ese id_theme tiene como valor 0 o 1 en el campo predeterminado.

por ejemplo mi tabla es:

THEMES
id_theme
archivo
nombre
predeterminado

quiero dentro de la funcion ver si el id_theme que recibi tiene THEMES.predeterminado=0 para ese id_theme

No se si se entiende.


Alguna ayuda por favor :/

solo he encontrado en internet operaciones matematicas pero sin trabajar dentro de las tablas en las funciones.
__________________
Rodrigo Lopez
  #2 (permalink)  
Antiguo 27/06/2009, 15:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: mysql y control de flujo. ayuda

si entendí bien, esto es lo que necesitas dentro de la función
Código sql:
Ver original
  1. DECLARE tema FLOAT;
  2. SELECT predeterminado INTO tema FROM THEMES WHERE id_theme=4;
En este caso, la variable tema, tendrá el valor del campo.

Para compararlo sería

if tema = 4 then
codigo
else
codigo


Nos cuentas como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/06/2009, 16:49
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: mysql y control de flujo. ayuda

Vamos por el principio: Una STORED FUNTION es na rutina que recibe parámetros sólo de entrada y retorna un único valor. ç¿Eso está claro, no?
Bueno, como rutina almacenada tiene como restricción que habitualmente resuelve alguna situación sin necesidad de leer tablas. En ese sentido, por lo general, si quisieras poner un SELECT a una tabla, éste debería dar error al cargar la function, pero habitualmente no lo hace.
De todos modos eso puede pasar si quieres restaurar la function en un backup de la base: da un error de rutina.
La cosa es fácil: la sintaxis debe incluir dentro de su encabezado la cláusula READS SQL DATA de esta forma:
Código sql:
Ver original
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS check_template$$
  3. CREATE FUNTION check_template(id INT) RETURNS INTEGER
  4. READS SQL DATA
  5. BEGIN
  6.     DECLARE tema INT DEFAULT 0;
  7.     SELECT predeterminado INTO tema FROM THEMES WHERE id_theme=id;
  8.     RETURN tema;
  9. END$$
  10. DELIMITER ;
Esto recibe un valor de id, y devuelve el contenido del campo `predeterminado` o NULL si no existe.

¿Esa sería la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 27/06/2009, 23:27
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

me da error.
tengo esto:

Código:
function check_template($id_theme){
		
		mysql_query("
		DELIMITER $$ 
		DROP FUNCTION IF EXISTS check_template$$
		CREATE FUNTION check_template(id INT) RETURNS INTEGER
		READS SQL DATA
		BEGIN 
			DECLARE tema INT DEFAULT 0;
			SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
			RETURN tema;
		END$$
		DELIMITER ;
		");
		
		$resp = mysql_query("SELECT check_template(".$id_theme.") tt");
		$row = mysql_fetch_array($resp);
		echo $row['tt'];
		
	}
hasta ahora lo relacionado a eso sin funcon es esto:

Código:
/*
		$resp = mysql_query("SELECT COUNT(id_theme) total_themes FROM themes where id_theme=".$id_theme." AND predeterminado='1' LIMIT 1");
		$row = mysql_fetch_array($resp);
		if($row['total_themes']==1){
			mysql_query("UPDATE themes SET predeterminado='1' where id_theme=1");
		}
		*/
pero quiero hacerlo con función. no se en qué me está dando error o si lo estoy llamando mal... hice lo del mysql_fetch_array para ver lo que me retornaba :/
__________________
Rodrigo Lopez
  #5 (permalink)  
Antiguo 27/06/2009, 23:38
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

dejé este otro para hacer una prueba. el campo es char predeterminado='0' o '1'

Código:
mysql_query("
		DROP FUNCTION IF EXISTS check_template
		CREATE FUNTION check_template(id INT) RETURNS CHAR
		BEGIN
      		declare tema char;
      		SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
			RETURN tema;
		END
		");
	
		$resp = mysql_query("SELECT check_template(".$id_theme.") AS tt");
		$row = mysql_fetch_array($resp);
		echo $row['tt'];
pero tmpoco me funciona.
que estoy haciendo mal?
me sale error
__________________
Rodrigo Lopez
  #6 (permalink)  
Antiguo 28/06/2009, 06:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: mysql y control de flujo. ayuda

Que error te da?
La variable tema debe ser del mismo tipo de dato del campo predeterminado.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 28/06/2009, 07:42
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: mysql y control de flujo. ayuda

Estás confundiendo cosas.
Una stored function se crea EN la base de datos y queda cargada EN la base de datos y se invoca como una función SQL cualquiera.
Lo que yo te puse es el código del script EN SQL que debe usarse para cargarla en una interfase de administración del tipo MySQL Query Browser, Navicat, phpMyAdmin. En algunos casos pueden ser suprimidas las líneas que indican el DELIMITER.
Pero no es un script que deba ni pueda ejecutarse desde un script PHP , a menos que estés intentando cargar la función desde código para luego usarla.
Desde el momento en que usas un CREATE, debes tener en cuenta que eso no es una función ni una consulta (que son sentencias de clase DML), sino sentencias que no devuelven valores salvo una ejecución exitosa (son sentencias de clase DDL).
Así pues, lo que debes hacer es:
1. Ejecutar el script desde phpMyAdmin o MySQL Query Browser para cargar la función en la base.
2. Invocarla como cualquier función, ya sea desde una sentencia o dentro de un SELECT:
Código SQL:
Ver original
  1. SELECT  check_template(23);
Esta sentencia te devovlerá, por ejemplo, el contenido del campo `predeterminado`del registro cuyo id es igual a 23...

¿Ahora se comprende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 28/06/2009, 11:37
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

ingrese el codigo :

DROP FUNCTION IF EXISTS check_template
CREATE FUNTION check_template(id INT) RETURNS CHAR
BEGIN
declare tema CHAR;
SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
RETURN tema;
END

y me devuleve error:
#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 'CREATE FUNTION check_template(id INT) RETURNS CHAR
BEGIN
declare temas CHAR' at line 2
__________________
Rodrigo Lopez
  #9 (permalink)  
Antiguo 28/06/2009, 12:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: mysql y control de flujo. ayuda

Correlo con los delimiters. Como te puso gnzsoloyo y correlo desde la consola de mysql. No lo corras desde phpmyadmin.

En la tabla, el campo predeterminado es tipo char?

Un saludo
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 28/06/2009, 14:04
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

si. predeterminado es char..
no encuentro la consola de mysql... soy noob en esto al parecer xD.
depende del cpanel. no se de donde puedo ejecutar eso.
de todas formas el de gnzsoloyo me lo reconoce bien aunque no me guarda la función, pero cuando cambio los campos a return char y darle a tema el tipo char me da problemas.
el de gnzsoloyo funciona bien si lo mantengo tal cual :/
__________________
Rodrigo Lopez
  #11 (permalink)  
Antiguo 28/06/2009, 14:52
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: mysql y control de flujo. ayuda

Prueba cambiando el CHAR por la dimensión correcta, sea cual fuere.
Suponiendo que en la tabla predeterminado tenga un tipo CHAR(50), entonces prueba la función como.
Código sql:
Ver original
  1. CREATE FUNCTION check_template(id INT) RETURNS CHAR(50)
  2. BEGIN
  3.   DECLARE tema CHAR(50);
  4.   SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
  5.   RETURN tema;
  6. END
El problema puede estar produciéndose allí: Tanto CHAR como FARCHAR requieren definición de longitud, sin el cual si dimensión es 1.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 28/06/2009, 15:10
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

lo probe asi tal cual pero con char(1) y me devolvió lo siguiente:

#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 '' at line 3
__________________
Rodrigo Lopez
  #13 (permalink)  
Antiguo 28/06/2009, 17:28
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: mysql y control de flujo. ayuda

Empecemos desde el principio: ¿De qué modo y a través de qué interfase estás tratando de cargar la función en la base?
- Si estás usando el phpMyAdmin, debes eliminar las líneas de los DELIMITER y en el formulario de SQL, abajo verás un casillero para indicar cuál es delimitador que usarás.
Allí le pones el delimitador de sentencias usado al final del END.
- Si estás usando MySQL Query Browser, debes copiar el código como está, y cargarlo en una ventana de script y correrlo directamente.
- Si usas la consola de MySQL, debes copiar el código línea a linea tal y como está, incluyendo las líneas de los DELIMITER. Cuando se cargue la última linea, la función estará cargada. Si te da un error en algún momento es que estás tipeando mal algo, o te estas salteando una linea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 28/06/2009 a las 17:37
  #14 (permalink)  
Antiguo 28/06/2009, 18:11
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

ya mira. tengo esto:

logré ejecutar esto:

DELIMITER $$
DROP FUNCTION IF EXISTS check_template$$
CREATE FUNTION check_template(id INT) RETURNS CHAR(1)
READS SQL DATA
BEGIN
DECLARE tema CHAR(1);
SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
RETURN tema;
END$$
DELIMITER ;


el problema es que abajo de las tablas me deberían aparecer las funciones que agrego. pero esta no me sale.
Todo se ejcutó con exito desde phpmyadmin, pero no me sale la función que acabo de crear check_template :/

alguna idea?

PD: gracias por el tiempo.
__________________
Rodrigo Lopez
  #15 (permalink)  
Antiguo 28/06/2009, 18:13
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

la volvi a ejecutar y ahora me salio error.
y eso que puse exactamente lo mismo :s
__________________
Rodrigo Lopez
  #16 (permalink)  
Antiguo 28/06/2009, 18:34
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: mysql y control de flujo. ayuda

¿Seguiste las instrucciones?
¿Eliminaste las lineas del DELIMITER?
¿Pusiste el $$ en el TextBox indicado?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 28/06/2009, 19:20
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

escribi esto en phpmyadmin:

DROP FUNCTION IF EXISTS check_template$$
CREATE FUNTION check_template(id INT) RETURNS CHAR(1)
READS SQL DATA
BEGIN
DECLARE tema CHAR(1);
SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
RETURN tema;
END$$

y escribi $$ en Delimitador

y no funciona. hice algo mal?
__________________
Rodrigo Lopez
  #18 (permalink)  
Antiguo 28/06/2009, 20:01
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: mysql y control de flujo. ayuda

Donde debe decir CREATE FUNCTION dice CREATE FUNTION...
Le falta la C a FUNCTION.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 28/06/2009, 21:15
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

genial!
me funciono. jajaja que tonto no haberme fijado en la mala redaccion.

una pregunta más par terminar...
yo quiero trabajar con esa funcion, y me gustaria saber de donde sacar un tutorial bueno para eso ya que busque muchas cosas en internet, pero no me acomodaron mucho...
me gustaria sbaer como puedo trabajar dentro de la funcion. con algun if y else quizás.
case, etc...
porque necesito que vea si el valor que retorne en esa funcion es cero (0) o uno (1) y dependiendo de eso hacer actualizacion de una tabla dentro de la misma funcion...
sabes donde puedo obtener esos detalles asi para empezar a trabajar?
__________________
Rodrigo Lopez
  #20 (permalink)  
Antiguo 28/06/2009, 21:27
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: mysql y control de flujo. ayuda

Una SF, en ese sentido, tiene las mismas reglas de sintaxis de un stores procedure, por lo que lo que uno hace, lo puede hacer.
Lo que debes tener en mente es que debes programar aquello que realmente cumpla con lo que deseas lograr:
1) Si quieres resolver un conjunto de operaciones de lectura, escritura, calculos varios, trazados de registros, análisis de registros, derivaciones según valores obtenidos, resolución de condiciones y operaciones condicionales, puediendo recibir parámetros y retornar valores y/ o resultados de consultas... Eso es con STORED PROCEDURES.
2) Si quieres lograr resolver un problema para el que no existe una función específica en MySQL, que realice varias tareas pero que te retorne un único valor, pero no resultados completos (tablas) de consultas... Eso es con STORED FUNCTIONS.
3) Si debes resolver una situación en el momento en que ingresas, actualizas o borras registros, que pueden afectar a otras tablas o a alguno de los valores que están usando en esa tabla, pero por sobre todo, en el momento de ejecutar la sentencia DML (INSERT, UPDATE, DELETE) ... Eso es con TRIGGERs.

Es muy importante no perder de vista que cada uno tiene su sentido de existencia, y no entremezclar conceptos. Tarde o temprano se termina por meter la pata, y caer en un pozo sin salida. Entonces debes inciar todo desde el principio si quieres resolver el problema. Prevenir es mas fácil.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 28/06/2009, 21:28
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

DROP FUNCTION IF EXISTS check_template$$
CREATE FUNCTION check_template(id INT) RETURNS VARCHAR(20)
READS SQL DATA
BEGIN
DECLARE tema CHAR(1);
SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
IF predeterminado = 0 THEN
RETURN '0';
ELSE
RETURN '1';
END$$

me da error eso por ejemplo. y es porque no se de sintaxis :s
__________________
Rodrigo Lopez
  #22 (permalink)  
Antiguo 28/06/2009, 21:32
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

lo que quiero es lo siguiente:
eliminé un theme.
quiero saber si ese estaba como predeterminado, de estar predeterminado tengo que dejar como predeterminado a otro sino la pagina no va a cargar ningun template.
se entiende?
por eso consulte lo de predeterminado, para ver si hacia un update a la tabla o no...

para eso tengo que hacer un trigger?
__________________
Rodrigo Lopez
  #23 (permalink)  
Antiguo 28/06/2009, 21: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: mysql y control de flujo. ayuda

Un error simple: EL condicional IF THEN/ELSE/END IF está incompleto.
Te falta el END IF;

Visita esto: Capítulo 19. Procedimientos almacenados y funciones
Casi todo lo que conozco de sintaxis de SP lo puedes sacar de allí.

Consejo: Cuando te te devuelva un mensaje de error de sintaxis, ármate de paciencia, toma el manual y empieza a revisar línea a línea y paréntesis por paréntesis. Casi siempre los errores son bastante tontos y generalmente, por escribir apurado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 28/06/2009, 21:39
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: mysql y control de flujo. ayuda

Cita:
Iniciado por rodrigo_lopez Ver Mensaje
lo que quiero es lo siguiente:
eliminé un theme.
quiero saber si ese estaba como predeterminado, de estar predeterminado tengo que dejar como predeterminado a otro sino la pagina no va a cargar ningun template.
se entiende?
por eso consulte lo de predeterminado, para ver si hacia un update a la tabla o no...

para eso tengo que hacer un trigger?
La respuesta la estás dando tu mismo: El problema es decidi qué acción tomar según el valor de algo... No si el valor que estás actualizando es correcto.
Es decir: debes hacer que se analice algo y según eso hacer una cosa o la otra... Eso essss... ¡Exacto! Stored Procedures.

Estudia un poco el tema de estos tres tipos de rutinas. Los TRIGGERS no se invocan, los invoca el DBMS ante un evento sobre la tabla y sólo hay tres tipos de evento: insertar, borrar, actualizar.
Uno lo que hace ees programar una rutina de sentencias para que se ejecuten antes o después del evento. Pero uno no invoca al trigger. El trigger se dispara solo ante un evento.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #25 (permalink)  
Antiguo 28/06/2009, 22:07
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

oh. ok. stored procedures entonces...
pero a las procedures puedo tb recibir el id_theme como en la funcion que tenia?
hacer el select, guardar en tema y luego trabajar con if y else para luego hacer un update?
__________________
Rodrigo Lopez
  #26 (permalink)  
Antiguo 28/06/2009, 22:15
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

por ejemplo que tendría malo aqui:

CREATE procedure check_themes(IN id int)
begin
DECLARE tema CHAR(1);
SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
IF tema=1 then
UPDATE themes set predeterminado=1 where id_theme=1;
else
//nada
end IF;
end$$
__________________
Rodrigo Lopez
  #27 (permalink)  
Antiguo 28/06/2009, 23:01
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: mysql y control de flujo. ayuda

Las "//" no son barras de comentario en MySQL. Se ponen "-- " con un espacio al final o bien se encierran entre "/*" y "*/" así:
Código sql:
Ver original
  1. -- Esto es un comentario
  2. /* Esto también es un comentario */
Por otro lado, si no vas a hacer algo en el ELSE, entonces no lo pongas.
Por lo demás, la sintaxis no contiene errores.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #28 (permalink)  
Antiguo 28/06/2009, 23:03
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

hice este:

CREATE procedure check_themes(IN id int)
BEGIN
DECLARE tema CHAR(1);
SELECT predeterminado INTO tema FROM themes WHERE id_theme=id;
CASE tema
WHEN '1' UPDATE themes set predeterminado = '1' where id_theme = 1;
END CASE;
END$$

y me da este error:
#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 'UPDATE themes set predeterminado = '1' where id_theme = 1;
END CASE;
END' at line 6

puse el delimiter lo del $$. que puede ser?
__________________
Rodrigo Lopez
  #29 (permalink)  
Antiguo 28/06/2009, 23:28
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

hice este y me compiló bien:

CREATE procedure check_themes(IN id int)
BEGIN
SELECT predeterminado FROM themes WHERE id_theme=id;
CASE predeterminado
WHEN '1' THEN UPDATE themes set predeterminado = '1' where id_theme = 1;
END CASE;
END$$

pero no se como llamarlo o ejecutarlo ya que no retorna nada y cuando lo llame por select o call desde phpmyadmin me tiró error :s
__________________
Rodrigo Lopez

Última edición por rodrigo_lopez; 28/06/2009 a las 23:36
  #30 (permalink)  
Antiguo 29/06/2009, 13:13
 
Fecha de Ingreso: diciembre-2002
Ubicación: arica 3334
Mensajes: 75
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: mysql y control de flujo. ayuda

CREATE procedure check_themes(IN id int)
BEGIN
SELECT predeterminado FROM themes WHERE id_theme=id;
CASE predeterminado
WHEN '1' THEN UPDATE themes set predeterminado = '1' where id_theme = 1;
END CASE;
END$$

como lo llamo?
:s
me esta tirando error con call y select
__________________
Rodrigo Lopez
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 14:24.