Delimiter en MySQL

Ya he hablado de lo confuso que me resultaba cómo hacer un Stored Procedure en MySQL en comparación con MS-SQL Server que es mi habitual.

Un paso más en su comprensión, es la palabra “DELIMITER”.

Lo habitual para separar una instrucción de otra, es finalizarlas con un “;” pero un SP, al igual que un Trigger, estan formados por varias instrucciones, por lo tanto, antes de comenzar su definición, debes especificar qué caracter delimita (o separa) un SP o un Trigger del siguiente SP o Trigger.

La cuestión metalógica será, si cambias el delimitador de instrucciones por excelencia, para separar un conjunto de instrucciones agrupadas en un objeto (SP o Trigger) de otro objeto, cómo es que este delimitador sigue siendo necesario y funcional dentro de este conjunto de instrucciones? Entonces, para qué cambiarlo? y sobre todo, para qué restaurarlo después? Me parece una manera de marear la perdiz.

DELIMITER |
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
|
DELIMITER ;

July 28th, 2007 by admin

6 Responses to “Delimiter en MySQL”

  1. Javier Medina says:

    Mejor explicado que la propia pagina de MySQL. Gracias por ese dato. Por lo que veo funciona como el GO de MSSQL

  2. Ricardo Vega says:

    tengo el siguiente codigo pero NO funciona
    delimiter $$

    drop procedure if exists `db_qv`.`parametros_select` $$
    create procedure `db_qv`.`parametros_select`
    (in icodigo varchar(30))
    begin
    select glosa
    ,valor
    from parametros
    where codigo = upper(icodigo);
    end $$

    delimiter ;
    no me acepta el delimiter, tengo la version 5.0.91-community
    sera por la version?, o algo estoy haciendo mal?, saludos

  3. admin says:

    A si de pronto, no sé qué decirte
    ¿Porqué no pruebas con un delimiter que sea solo un carácter?

  4. Naldo says:

    Hola.

    Muchas gracias por este dato.

    ¿Oracle no utiliza algo parecido? O sí?

    Gracias.

  5. Naz says:

    Hola a todos
    Tenia el problema del error de sintaxis, probe con poner un DELIMITER de solo un caracter y listo
    Gracias por el tip

  6. Ivan says:

    Pues tienes razon, pero supongo que lo pensaron asi para hacer que las consultas de creacion de procedimientos sean “leibles” para la linea de comando y evitarse de reconstruir todo el modelo de sintaxis existente (y asi evitar incompatibilidades con las versiones anterioes).

    Yo tambien me siento incomodo al tener que cambiar el delimitador, pero me he acostumbrado a ello, con Workbench no se hace muy compleja la cosa.

    Hay cientos de cosas que odio de SQL Server pero tambien me acostumbre a ellas, creo que es cuestion de costumbre.

Leave a Reply