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

if wn mysql error

Estas en el tema de if wn mysql error en el foro de Mysql en Foros del Web. hola, estoy tratando de crear una funcion para validar el ingreso de unas fechas (date), por lo que hice lo siguiente: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: ...
  #1 (permalink)  
Antiguo 01/12/2012, 17:36
 
Fecha de Ingreso: noviembre-2012
Mensajes: 8
Antigüedad: 11 años, 5 meses
Puntos: 0
if wn mysql error

hola, estoy tratando de crear una funcion para validar el ingreso de unas fechas (date), por lo que hice lo siguiente:

Código MySQL:
Ver original
  1. delimiter //
  2. create or replace function agregarEvento (detalle1 varchar(200),fecha_inicio1 date, fecha_termino1 date, lugar1 varchar(100), tipo_trabajo1 varchar(50), imagen1 varchar(300)) returns int
  3. declare salida int;
  4. if fecha_inicio1>=curdate() and fecha_inicio1<fecha_termino1 then
  5. set salida = 1;
  6. insert into evento(detalle,fecha_inicio,fecha_termino,lugar,tipo_trabajo,imagen) values(detalle1,fecha_inicio1,fecha_termino1,lugar1,tipo_trabajo1,imagen1);
  7. set salida = 0;
  8. return salida;
  9. //

Sin embargo, me arroja el siguiente 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 'if fecha_inicio1>=curdate() and fecha_inicio1<fecha_termino1 then
set salida = 1' at line 1
(15 ms taken)

Alguien sabe a que se debe el error ?

Última edición por gnzsoloyo; 01/12/2012 a las 17:47 Razón: Código SQL sin etiquetar.
  #2 (permalink)  
Antiguo 01/12/2012, 17: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, 5 meses
Puntos: 2658
Respuesta: if wn mysql error

CREATE OR REPLACE en MySQL sólo se usa con CREATE VIEW, no con las rutinas.

Código MySQL:
Ver original
  1. delimiter $$
  2. create function agregarEvento (
  3.     detalle1 varchar(200),
  4.     fecha_inicio1 date,
  5.     fecha_termino1 date,
  6.     lugar1 varchar(100),
  7.     tipo_trabajo1 varchar(50),
  8.     imagen1 varchar(300)
  9.     ) returns int
  10.     declare salida int;
  11.     if fecha_inicio1>=curdate() and fecha_inicio1<fecha_termino1 then
  12.         set salida = 1;
  13.         insert into evento(detalle,fecha_inicio,fecha_termino,lugar,tipo_trabajo,imagen)
  14.         values(detalle1,fecha_inicio1,fecha_termino1,lugar1,tipo_trabajo1,imagen1);
  15.     else
  16.         set salida = 0;
  17.     end if;
  18.     return salida;
  19. $$

Tip: No uses "//" como delimitador, puede generar conflictos en ciertos scripts.
Usa "$$", que es lo que por default encontrarás en todos los manuales.
__________________
¿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 01/12/2012, 18:00
 
Fecha de Ingreso: noviembre-2012
Mensajes: 8
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: if wn mysql error

gracias por la pronta respuesta, pero me sigue tirando este 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 'if fecha_inicio1>=CURDATE() AND fecha_inicio1<fecha_termino1 THEN
SE' at line 1
(15 ms taken)

no sé si estoy haciendo mal el if o así no se comparan los date en mysql
  #4 (permalink)  
Antiguo 01/12/2012, 18:07
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, 5 meses
Puntos: 2658
Respuesta: if wn mysql error

Empecemos por el principio:
1) Qué versión de MySQL tiene tu servidor (supongo que sabes cómo averiguarlo).
2) Cómo estás metiendo este script (phpMyadmin, MySQL Workbench..., etc).

Por cierto, detrás del END van los $$, no el ";", porque el END del BEGIN es el cierre de todo el script.
__________________
¿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; 01/12/2012 a las 19:07
  #5 (permalink)  
Antiguo 01/12/2012, 18:21
 
Fecha de Ingreso: noviembre-2012
Mensajes: 8
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: if wn mysql error

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Empecemos por el principio:
1) Qué versión de MySQL tiene tu servidor (supongo que sabes cómo averiguarlo).
2) Cómo estás metiendo este script (phpMyadmin, MySQL Workbench..., etc).

Por cierto, detrás del END van los $$, no el ";", porque el END del BEGIN es el cierre de todo el script.
1) 5.5.24

2) utilizo SQLyog

Última edición por gnzsoloyo; 01/12/2012 a las 19:07
  #6 (permalink)  
Antiguo 01/12/2012, 19:11
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, 5 meses
Puntos: 2658
Respuesta: if wn mysql error

Cortito como lenguetada de gato...



Mira, yo uso el MySQL Workbench, que al ser nativo es mucho mejor que cualquier otro, con la ventaja de tener un corrector sintáctico, y dentro de este no marca ningún error. Incluso lo probé compilando, y se creo perfectamente,
Ergo, si hay un error de sintaxis está siendo generado por el SQLYog, o estás usando incorrectamente el método del SQLYog para crear la SF.
Verifica si la sintaxis es correcta usando otro front-end (te recomiendo el MySQL Workbench).
__________________
¿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 01/12/2012, 19:27
 
Fecha de Ingreso: noviembre-2012
Mensajes: 8
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: if wn mysql error

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Cortito como lenguetada de gato...



Mira, yo uso el MySQL Workbench, que al ser nativo es mucho mejor que cualquier otro, con la ventaja de tener un corrector sintáctico, y dentro de este no marca ningún error. Incluso lo probé compilando, y se creo perfectamente,
Ergo, si hay un error de sintaxis está siendo generado por el SQLYog, o estás usando incorrectamente el método del SQLYog para crear la SF.
Verifica si la sintaxis es correcta usando otro front-end (te recomiendo el MySQL Workbench).
gracias, utilizaré el MySQL Workbench entonces ya que me dices que ahi funciona :D
  #8 (permalink)  
Antiguo 01/12/2012, 22:56
 
Fecha de Ingreso: noviembre-2012
Mensajes: 8
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: if wn mysql error

acabo de instalarlo (estaba haciendo otras cosas xD) y trato de crear la función pero me arroja este error:

Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

me estoy empezando a desesperar :S con oracle no me pasaban estas cosas...

pd: sorry por el doble post
  #9 (permalink)  
Antiguo 02/12/2012, 04:58
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, 5 meses
Puntos: 2658
Respuesta: if wn mysql error

Vamos a hacer una aclaración previa, algo que siempre tienes que tener en cuenta: No existe un estándar ANSi del PL/SQL, por ello no se puede hacer comparaciones sobre "bondades" entre los diferentes DBMS. Cada uno de ellos hace lo que se le canta con sus métodos, y cuando cambias de uno a otro, debes como mínimo leer el manual de referencia para ver lo que te espera.
Yo también trabajo en Oracle, y puedo decirte que en ciertas ocasiones termina siendo mas complicado hacer ciertas cosas en Oracle que en MySQL. Incluso puedo asegurarte que el Oracle, a nivel de PL/SQL es mucho más "quisquilloso" que el MySQL.

Usa el manual de referencia. Es lo que cualquier BDA que se precie hace, porque nadie se acuerda de todo.

SI lo hubieses leído, te habrías enterado que las funciones almacenadas no se diseñaron para realizar operaciones de INSERT/UPDATE, sino para obtener un único valor en base a alguna consulta. Por esa razón, por defecto, aceptan los SELECT, pero no te aceptan INSERT/UPDATE.
Ahora bien, como obviamente es posible que se pretenda realizar ese tipo de acciones dentro de una función (si lo analizas, en realidad no es necesaria una SF sino un SP para lo que quieres hacer), las SF pueden hacerlo, pero se debe indicar que la SP contiene operaciones de insercion/actualizacion en tablas....
En otras palabras: Para permitir una función que haga operaciones de ese tipo, la cabecera de la función debe indicar expresamente que el cuerpo de la función contiene eso.

¿Se entiende?

Estás escribiendo incompleta la función, y eso es lo que te da como mensaje (por favor, habitúate al inglés, y lee lo que dice el mensaje de error así ahorras tiempo).

Lo que te dice el mensaje es que a la declaración le falta una cláusula, la cual podría ser DETERMINISTIC, NO SQL o READS SQLDATA, pero hay otras.

La cosa sería, por ejemplo:
Código MySQL:
Ver original
  1. delimiter $$
  2. DROP FUNCTION IF EXISTS agregarEvento $$
  3. CREATE FUNCTION agregarEvento (
  4.     detalle1 VARCHAR(200),
  5.     fecha_inicio1 DATE,
  6.     fecha_termino1 DATE,
  7.     lugar1 VARCHAR(100),
  8.     tipo_trabajo1 VARCHAR(50),
  9.     imagen1 VARCHAR(300)
  10.     ) RETURNS INT
  11.     DECLARE salida INT;
  12.     if fecha_inicio1>=CURDATE() AND fecha_inicio1<fecha_termino1 THEN
  13.         SET salida = 1;
  14.         INSERT INTO evento(detalle,fecha_inicio,fecha_termino,lugar,tipo_trabajo,imagen)
  15.         VALUES(detalle1,fecha_inicio1,fecha_termino1,lugar1,tipo_trabajo1,imagen1);
  16.     ELSE
  17.         SET salida = 0;
  18.     END if;
  19.     return salida;
  20. END$$
  21. DELIMITER ;
Pruebalo y vemos.

Y por favor, usa el manual de referencia. Está en la Web.
__________________
¿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: sql, tipo
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:21.