Ver Mensaje Individual
  #9 (permalink)  
Antiguo 02/12/2012, 04:58
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 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)