2012-02-28 22 views
5

Quiero establecer el delimitador dentro de un archivo sql (porque no puedo confiar en que los usuarios lo hagan a través del terminal).Establecer el delimitador MySQL dentro de un archivo sql

¿Hay alguna instrucción mysql que me permita establecer el delimitador?

Usando

DELIMITER // 

genera un error.

# Categories schema 

# --- !Ups 


CREATE TABLE IF NOT EXISTS `category` (
    `id` INT NOT NULL AUTO_INCREMENT , 
    `pid` INT NULL DEFAULT 0 , 
    `label` VARCHAR(64) NULL , 
    `active` TINYINT NULL DEFAULT 0, 
    PRIMARY KEY (`id`)); 

DELIMITER // 

CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id(value INT) RETURNS INT 
NOT DETERMINISTIC 
READS SQL DATA 
BEGIN 
     DECLARE _id INT; 
     DECLARE _parent INT; 
     DECLARE _next INT; 
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET @id = NULL; 

     SET _parent = @id; 
     SET _id = -1; 

     IF @id IS NULL THEN 
       RETURN NULL; 
     END IF; 

     LOOP 
       SELECT MIN(id) 
       INTO @id 
       FROM category 
       WHERE pid = _parent 
         AND id > _id; 
       IF @id IS NOT NULL OR _parent = @start_with THEN 
         SET @level = @level + 1; 
         RETURN @id; 
       END IF; 
       SET @level := @level - 1; 
       SELECT id, pid 
       INTO _id, _parent 
       FROM category 
       WHERE id = _parent; 
     END LOOP; 
END// 

DELIMITER ; 

# --- !Downs 

#DROP TABLE category; 

We got the following error: 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 'DELIMITER/CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id(value INT) ' at line 1 [ERROR:1064, SQLSTATE:42000], while trying to run this SQL script:

+1

¿Qué significa delimitador dentro de archivo sql? puedes ser mas claro? ¿que estás tratando de hacer? –

+0

¿Puedes pegar el error? – Gianluca

+0

El error es bastante inútil. Es un 1064. –

Respuesta

0

Usted dice que está usando

DELIMITER // 

Pero el guión dice

DELIMITER # 

Si eso es lo que está usando, puede que sólo sea que el # es sintaxis de comentario? http://dev.mysql.com/doc/refman/5.1/en/comments.html

Así que es posible que no establezca ninguna DELIMITER, por lo que la siguiente palabra clave es inesperada.

(bueno, ese era el caso antes de que su edición :).)

+0

Nada de malo en usar # como delimitador. Yo lo revisé. – Mchl

+0

Intenté ambos;) Ninguno de los dos funcionó. –

0

En la versión de MySQL utilizo el mismo error se produce cuando se utiliza el comando delimitador, pero esta versión maneja el delimitador ";" para declaraciones y delimitador "|" para procedimientos almacenados y funciones, que creo que resuelve el problema; intente esto:

- cualquier declaración por comas terminado aquí (seleccionar, crear la tabla, la caída de mesa, actualizar, eliminar, etc)

CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id (int value) int

- Función cuerpo aquí

END |

- otras declaraciones o funciones aquí

Cuestiones relacionadas